问答详情
源自:3-7 动画导入-Unity3D角色控制

3-6中鼠标点击目的地使角色移动中,WalkOn()是怎么写的啊

UpDate()和LateUpDate()都没有对WalkOn()更新的代码,难道写在FixedUpDate()里吗?呃,我的意思是,键盘那里是每帧更新该帧的位置,而鼠标这个是点一次之后很多帧都重复执行同一种更新直到到达目的地,也就是怎么写能简单到“类似的代码”

提问者:LymphV 2017-03-02 22:51

个回答

  • weak_ptr
    2017-12-09 22:16:19
    已采纳

    我的实现思路是这样的,保存一个目标位置,然后每一帧都向目标位置按一定速度移动。

    具体代码这样子。

    private Vector3 _targetPosition;
    public float Speed;
    
    void Update()
    {
        Vector3 dist = _targetPosition - transform.position; // 计算从当前位置到目标位置的向量
        dist.y = 0; // 只在平面上移动,去除高度差。
        Vector3 velocity = dist.normalized * Time.deltaTime * Speed; // 本次移动的向量
        if(dist.magnitude < velocity.magnitude) // 如果这一次移动就会抵达目标位置,则直接使用当前位置到目标位置的向量作为移动向量
        {
            velocity = dist;
        }
        if(velocity != Vector3.zero) // 如果还没移动到目的地则进行这次移动
        {
            transform.Translate(dist);
        }
    }
    
    void MoveTo(Vector3 pos)
    {
        _targetPosition = pos;
    }

    因为Vector3 是值类型,所以不能通过判 null 来处理移动和不移动的状态,可以通过再加个 成员变量 _needMove 来避免每一帧都计算一次位移,这里懒得写了。