我想在 x 秒内并在协程函数中将GameObject从位置 A移动到 B。Vector3.MoveTowards我知道如何做到这一点,Vector3.Lerp但这次更愿意这样做,Vector3.MoveTowards因为这两个函数的行为不同。
有了Vector3.Lerp,这就像做这个:
IEnumerator moveToX(Transform fromPosition, Vector3 toPosition, float duration)
{
float counter = 0;
//Get the current position of the object to be moved
Vector3 startPos = fromPosition.position;
while (counter < duration)
{
counter += Time.deltaTime;
fromPosition.position = Vector3.Lerp(startPos, toPosition, counter / duration);
yield return null;
}
}
我试图用 做同样的事情Vector3.MoveTowards,但它不能正常工作。问题是移动在 x 时间或持续时间之前完成。此外,它不会平稳移动。它跳到两个位置的中间而不是位置 B 的末尾。
这是Vector3.MoveTowards与上述问题一起使用的函数:
IEnumerator MoveTowards(Transform objectToMove, Vector3 toPosition, float duration)
{
float counter = 0;
while (counter < duration)
{
counter += Time.deltaTime;
Vector3 currentPos = objectToMove.position;
float time = Vector3.Distance(currentPos, toPosition) / duration;
objectToMove.position = Vector3.MoveTowards(currentPos, toPosition,
time);
Debug.Log(counter + " / " + duration);
yield return null;
}
}
如何Vector3.MoveTowards在 x 秒内并在协程函数中将GameObject 从位置 A 移动到 B ?
请不要建议,Vector3.Lerp因为那不是我想要使用的。
编辑:
更换
float time = Vector3.Distance(currentPos, toPosition) / duration;
和
float time = Vector3.Distance(startPos, toPosition) / (duration * 60f);
工作,但当焦点从 Unity 转移到另一个应用程序时会出现问题。这样做会导致运动无法完成。在启动计时器之前每帧计算一次而不是一次似乎更合理。
MYYA
相关分类