Unity之路(七):游戏对象跟随鼠标移动示例

    public float speed = 1.0f; // 角色移动速度
    private Vector3 target; // 目标位置
    private bool isOver = true; // 移动是否结束

    void Update () {
        if (Input.GetMouseButton(0)) {
            GetMonsePos();
        }
        MoveTo(target);
    }

    // 1 获取鼠标点击的位置
    public void GetMonsePos()
    {
        // a 创建射线
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);// 从摄像机发射出一条经过鼠标当前位置的射线
        // b 发射射线
        RaycastHit hitInfo = new RaycastHit();
        if (Physics.Raycast(ray, out hitInfo)) {
            // 获取碰撞点位置
            if (hitInfo.collider.name == "Plane") {
                target = hitInfo.point;
                target.y = 0.5f;// 地面的y坐标为0,而cube的y必须为0.5f才能看得见
                isOver = false;
            }
        }
    }

    // 2 让角色移动到目标位置
    public void MoveTo(Vector3 tar) {
        if (!isOver){
            Vector3 v1 = tar - transform.position;
            transform.position += v1.normalized * speed * Time.deltaTime;
            // 到达目标位置
            if (Vector3.Distance(tar, transform.position) <= 0.3f) {
                isOver = true;
                transform.position = tar;
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值