Unity 精确移动到指定位置

111

/// <summary>
/// 可靠移动,一定移动到指定坐标
/// </summary>
public class FixeldMove : MonoBehaviour
{
    public float speed = 1;
    public GameObject target;
    private bool IsStart = false;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (IsStart)
        {
            if (target != null)
            {
                gameObject.transform.localPosition = Vector3.MoveTowards(gameObject.transform.localPosition, target.transform.position, speed * Time.deltaTime);
            }
            else {
                gameObject.transform.Translate(gameObject.transform.forward* speed * Time.deltaTime);
            }
        }
    }
    public void MoveStart(GameObject _target, float _speed)
    {
        target = _target;
        speed = _speed;
        IsStart = true;
    }
}

 

222

 

if (dir.magnitude > 0)//这里不会retrun,但是已经在目标位置会导致方向计算为0 有可能出现角色强制朝向世界Z轴 就是胡乱闪动现象
{
this.transform.forward = dir;
this.transform.position = Vector3.MoveTowards(this.transform.position, target, deltatime * speed);
}

另外,查看了MoveTowards函数的unity官方代码发现里面是判定了当前这次按照速度的移动距离如果大于当前坐标到目标点的距离,则直接设置为目标坐标。

待验证:这种情况下如果是按路径移动,路径中的每个点是否会有卡顿现象,如果有的话,只能是最后一个点才能采用这种精确移动。

posted @ 2021-03-15 16:56  大刀乱飞  阅读(1039)  评论(0)    收藏  举报