对于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;
}
}
}
答案 0 :(得分:3)
我可能遗漏了一些东西,但我没有看到 speed 的价值被设置在任何地方。
答案 1 :(得分:1)
这是我们的好朋友LERP的用途。 LERP很棒,因为你只是说"我有两个向量,我想最终介于两者之间。"在这种情况下,您希望两个向量分别成为移动者的位置和目标位置,并且它们之间的距离将是speed * deltaTime。这可以为您节省所有复杂的矢量数学。