Unity3D小白学习日记(01):如何把物体移动到鼠标点击处

注:不妥之处,还请指点迷津~

首先我们创建一个物体(带有Rigidbody和Collider属性),图为一个萌萌的墨超侠
图为一个萌萌的墨超侠

然后创建一个地面,因为后面需要用到射线检测,因此把该地面的层设置为“Map”(通过Add Layer为其添加一个自定义的层)
通过Add Layer为其添加Map层

为我们的墨超侠添加一个脚本,脚本代码如下:

public class PlayerController : MonoBehaviour
{

    public float MoveSpeed = 10;

    private Vector3 targetPosition;

    void Start()
    {
        targetPosition = transform.position;
    }

    void Update()
    {
        if ((transform.position - targetPosition).magnitude > 0.1f)
            Move();
    }

    public void SetTarget(Vector3 _target)
    {
        targetPosition = _target;
        //传入的参数的y坐标要和物体的y坐标一致(保存物体的竖直坐标不变)
        targetPosition.y = transform.position.y;
    }

    private void Move()
    {
        transform.Translate((targetPosition - transform.position)*MoveSpeed*Time.deltaTime, Space.World);
    }
}

现在,只要给我们的墨超侠的SetTarget()方法传入一个参数(目标位置),就可以让它以moveSpeed的速度移动到那个点。

最后,在我们的GameManager脚本里控制这个游戏,代码如下:

public class GameManger : MonoBehaviour {

    public GameObject Player;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            bool isCollider = Physics.Raycast(ray, out hit, 1000, LayerMask.GetMask("Map"));
            if (isCollider)
            {
                Player.GetComponent<PlayerController>().SetTarget(hit.point);
                Player.transform.LookAt(hit.point);
            }
        }
    }
}

解释如下:
(1)Input.GetMouseButtonDown(0)方法用来判断鼠标左键是否被按下;
(2)Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);这里创建了一个Ray对象,它是一条根据鼠标点击的位置而从屏幕发射出来的射线;
(3)RaycastHit hit; 其中hit是RaycastHit结构体的一个引用,负责保存Raycast()方法返回的信息;
(4)Physics.Raycast(ray, out hit, 1000, LayerMask.GetMask(“Map”));这里使用射线检测,检测这条长度为1000的ray射线是否碰撞到一个名为Map的层,并把结果保存到hit中

最后最关键的一步来了,把hit.point传入我们的墨镜侠的SetTarget()方法中,它代表的是射线与层的交点的世界坐标,切记千万不能用hit.collider.transform.position来代替hit.point,因为它代表的只是射线碰撞到的物体的自身世界位置,比如在此案例中,它返回的是地图的世界坐标(0,0,0),这样的话无论你怎么点,墨镜侠只会走到(0,0,0)这个点。

奉上效果图:
动次打次

猜你喜欢

转载自blog.csdn.net/weixin_37658157/article/details/76164101