Unity3D教程:如何使用鼠标点击控制角色移动
发表于2017-02-17
实现游戏角色移动不仅可以通过自动寻路方式实现,还可以通过控制鼠标点击位置实现,可能有些开发者会对第二种控制角色移动方式感兴趣,为此,下面就给大家介绍下Unity3D中使用鼠标点击控制角色移动的实现方法,一起来看看吧。
实现原理解析:
当我们点击屏幕时,我们按照一定的方法,将屏幕上的二维坐标转化为三维坐标,然后我们从摄像机位置发射 一条经过该点的射线,则这条射线与大地平面的交点,就是我们的目标位置。那么确定了这个位置以后,我们需要做的就是让角色从原来的位置移动到这个位置,并在其间添加角色动画即可。对于角色移动的问题,如果复杂点的画我们可能要计算移动的方向向量,并针对起点和终点进行插值计算来实现,这里我们选择一种相对简单的办法,在Unity3D中,有一个LookAt()方法,该方法可以使物体发生旋转,使其z轴始终指向目标物体。再完成了旋转后,我们需要让物体沿着Z轴方向(forward)移动。这样就实现了鼠标点击控制人物走动这一功能。
首先创建一个场景,准备一个地形Terrain和平行光Direction Light,并拖入之前事先准备好的人物模型,如图:

接下来为模型添加动画组件,并将动画的类型设置为Legacy模式,如图所示:


设置默认的动画为idle,接下来,就要编写脚本代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | using UnityEngine; using System.Collections; public class PeopleControl : MonoBehaviour { //目标点坐标 private Vector3 mTargetPos; void Start () { } void Update () { //按下鼠标右键时 if (Input.GetMouseButton(1)) { //获取屏幕坐标 Vector3 mScreenPos=Input.mousePosition; //定义射线 Ray mRay=Camera.main.ScreenPointToRay(mScreenPos); RaycastHit mHit; //判断射线是否击中地面 if (Physics.Raycast(mRay, out mHit)) { if (mHit.collider.gameObject.tag== "Terrain" ) { //获取目标坐标 mTargetPos=mHit.point; //让主角面朝目标坐标并向目标移动 transform.LookAt(mTargetPos); //播放奔跑动画 transform.gameObject.GetComponent "run" ); transform.Translate(Vector3.forward * 0.5F); } } } //松开鼠标右键时 if (Input.GetMouseButtonUp(1)) { transform.gameObject.GetComponent "idle" ); } } } |
将脚本绑定到角色上以后,就能看到下面的效果了。
