通过位置递增移动游戏对象

时间:2016-12-11 17:41:27

标签: unity3d

对于Unity编码练习,我试图以恒定速度向目标移动游戏对象,并且我希望它一旦达到1.0或更小的距离就停止移动;即它仅在距离大于1.0个单位时移动。

(我知道如何通过对其僵硬的身体施加力来做到这一点,但这只是为了编码练习......)

我无法弄清楚为什么它没有移动,尽管在Inspector中设置了目标位置,如附图中所示。

有人可以帮我理解我做错了吗?

using UnityEngine;
using System.Collections;


public class Mover : MonoBehaviour
{
    public Vector3 target;
    private float speed;


    void Start()
    {
        Debug.Log(this.name); // Print the name of the game object this script is attached to.
    }


    void Update()
    {
        float distance = Vector3.Distance(transform.position, target);

        if (distance > 1.0f)
        {
            Vector3 direction = target - transform.position;
            direction.Normalize();
            transform.position += direction * speed * Time.deltaTime;
        }
    }
}

enter image description here

2 个答案:

答案 0 :(得分:3)

我可能遗漏了一些东西,但我没有看到 speed 的价值被设置在任何地方。

答案 1 :(得分:1)

这是我们的好朋友LERP的用途。 LERP很棒,因为你只是说"我有两个向量,我想最终介于两者之间。"在这种情况下,您希望两个向量分别成为移动者的位置和目标位置,并且它们之间的距离将是speed * deltaTime。这可以为您节省所有复杂的矢量数学。