Unity3D培训
美国上市Unity3D培训机构

400-111-8989

VR培训

Unity3D教程鼠标点击移动以及自动寻路

  • 发布:Unity3D培训
  • 来源:Unity3D教程
  • 时间:2017-03-23 15:49

unity鼠标点击移动以及自动寻路教程

创建一个Cube调整大小,制作成地面的形式,并修改名称为“ floor ”把摄像机调整到适合的角度。

创建一个C#脚本,命名为“Pathfinding ”。

在脚本中输入以下代码:

void Update ()

{

/**[/color]

[color=#444444] unity3d培训[/color]

[color=#444444] By_Robin[/color]

[color=#444444] */

//当单机鼠标时

void Update ()

{

if(Input.GetMouseButtonDown(0))

{

//定义一条从主相机射向鼠标位置的一条射向

Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);

RaycastHit hit;

//判断射线是否发生碰撞

if (Physics.Raycast(ray, out hit, 100))

{

//判断碰撞物体是否为floor

if(hit.collider.gameObject.name=="floor")

{

//打印出碰撞点的坐标

Debug.Log(hit.point);

}

}

}

}

将代码添加到我们的相机物体上,运行游戏,鼠标在我们创建的地面上点击,控制台就会输出点击点的坐标,

通过上面的简单的例子,我们就可以得到目的点的坐标,具体做法:当我们点击鼠标时,从我们的摄像机朝我们鼠标的方向发射一条射线,当射线与地面发生碰撞时,输出碰撞点的坐标,这个坐标就是鼠标点击到地面的点的坐标,也就是目标点坐标。

坐标点已经找到了,下面一部就是要让我们的游戏物体看向这个坐标点,

有一种简单的方法就是直接让我们的主角lookat这个坐标点。

下面我们新建一个游戏对象,作为我们的主角并修改名称为“person”;

补充脚本如下:

private GameObject play;

void Start ()

{

play=GameObject.Find("person");

}

// Use this for initialization

void Update ()

{

if(Input.GetMouseButtonDown(0))

{

Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);

RaycastHit hit;

if (Physics.Raycast(ray, out hit, 100))

{

if(hit.collider.gameObject.name=="floor")

{

Debug.Log(hit.point);

play.transform.LookAt(hit.point);

}

}

}

}

运行游戏,当我们点击地面时,游戏物体旋转方向看向我们点击的点,

这样做有一个问题,主角会瞬间旋转到我们需要的角度,我们现在要控制他的旋转速度,让其缓慢旋转。

这就要用到另外一种做法;用到四元数组transform.rotation = Quaternion.Slerp (from.rotation, to.rotation,Time.time * speed);

from.rotation为初始角度,

to.rotation为目标角度

speed为旋转速度,

利用者个方法,我们就可以实现让物体缓慢旋转到我们要的指定角度,

具体做法,新建一个空物体,命名为To_rotation,将其作为person 物体的子物体,

代码补充如下:

public Transform to;

public float speed = 5F;

private GameObject play;

void Start ()

{

play=GameObject.Find("person");

to=GameObject.Find("To_rotation ");

}

// Use this for initialization

void Update ()

{

if(Input.GetMouseButtonDown(0))

{

Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);

RaycastHit hit;

if (Physics.Raycast(ray, out hit, 100))

{

if(hit.collider.gameObject.name=="floor")

{

Debug.Log(hit.point);

//点击地面后解除to的父子关系;并让我lookat目标点;

to.transform.parent = null;

to.LookAt(hit.point);

}

}

}

//如果我们的play 的旋转角度与to的角度相同,则恢复其父子关系,并将其坐标归零

if(play.transform.rotation==to.rotation)

{

to.transform.parent=play.transform;

to.transform.localPosition = new Vector3(0, 0, 0);

}

else

//如果play 与to的角度不同,则旋转play至to所在的角度

play.transform.rotation = Quaternion.Slerp(play.transform.rotation, to.rotation, speed);

}

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:Unity3D教程实现简单的赛车漂移
下一篇:VR|用Unity开发HTC Vive:远处拖动3D物体
Unity|超级兔子

Unity|超级兔子

Unity超级角色控制器物理API分析与功能实现

Unity超级角色控制器物理API分析与功能实现

教程:让Unity中物理效果更加逼真

教程:让Unity中物理效果更加逼真

Unity3D 软件下载

Unity3D 软件下载

选择城市和中心
贵州省

广西省

海南省