KING_UNITY学习之鼠标点击地面控制人物移动

实现一个在RPG中游戏中十分常见的功能,通过鼠标点击屏幕来控制人物的走动。

一、原理:

当我们点击屏幕时,我们按照一定的方法,将屏幕上的二维坐标转化为三维坐标,然后我们从摄像机位置发射 一条经过该点的射线,则这条射线与大地平面的交点,就是我们的目标位置。那么确定了这个位置以后,我们需要做的就是让角色从原来的位置移动到这个位置,并在其间添加角色动画即可。对于角色移动的问题,如果复杂点的画我们可能要计算移动的方向向量,并针对起点和终点进行插值计算来实现,这里我们选择一种相对简单的办法,在Unity3D中,有一个LookAt()方法,该方法可以使物体发生旋转,使其z轴始终指向目标物体。在完成了旋转后,我们需要让物体沿着Z轴方向(forward)移动。这样就实现了鼠标点击控制人物走动这一功能。


二、实例:

public Transform Cam;
public AnimationClip Run;
public AnimationClip Idle; 
private Ray mRay;
private RaycastHit mHit; 
private bool isCanAutoMove;
private Vector3 mTargetPos;
void Update()
{
// 鼠标点击某个点,人物走向该地点
            if (Input.GetMouseButton(0))
            {
                mRay = Cam.camera.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(mRay, out mHit))
                {
                    if (mHit.collider.gameObject.tag == "Terrain")
                    {
                        mTargetPos = mHit.point;
                        transform.LookAt(new Vector3(mTargetPos.x,mTargetPos.y,mTargetPos.z));
                        isCanAutoMove = true;
                    }
                }
            }

            if (isCanAutoMove)
            {
                animation.CrossFade(Run.name, 0.15f);
                transform.Translate(Vector3.forward * movespeed * Time.deltaTime);
                Cam.transform.Translate(Vector3.forward * movespeed * Time.deltaTime);
                float targetDist = Vector3.Distance(mTargetPos, transform.position);
                if (targetDist <= 1)
                {
                    isCanAutoMove = false;
                    animation.CrossFade(Idle.name, 0.15f);
                }
            }
}


你可能感兴趣的:(U3D开发)