我试图平稳地将物体从 a 点移动到 b 点:
Instantiate(cat, OffScreenLeft(), Quaternion.identity);
Debug.Log("start position: " + OffScreenLeft());
Debug.Log("end position: " + InPosition());
StartCoroutine(MoveFromTo(cat.transform, OffScreenLeft(), InPosition(), 3f));
IEnumerator MoveFromTo(Transform objectToMove, Vector3 a, Vector3 b, float speed) {
float step = (speed / (a - b).magnitude) * Time.fixedDeltaTime;
float t = 0;
while (t <= 1.0f) {
t += step; // Goes from 0 to 1, incrementing by step each time
objectToMove.position = Vector3.Lerp(a, b, t); // Move objectToMove closer to b
yield return new WaitForFixedUpdate();
}
objectToMove.position = b;
Debug.Log("move complete cat: " + cat.transform.position);
}
这是调试输出:
start position: (-20.34, 4.33)
end position: (-8.67, 4.33)
move complete cat: (-8.67, 4.33, 0.00)
调试输出显示猫应该移动了。但它仍然出现在屏幕外,留在原来的位置。我遗漏了什么?
您在第一行中实例化一个新对象。实例化是一种复制对象并将其放置到场景中。因此,您创建副本
cat
并将其放置到场景中。但在此之后,您继续使用cat
对象。因此,您正在更改原始cat
对象(预制件或其他东西),而不是创建的对象。您必须使用从方法中接收作为返回值的对象
Instantiate
并继续对其进行操作。