我想搬家
游戏对象
从A位置到B位置
Vector3.MoveTowards
在x秒内,在一个协程函数中。我知道怎么做
Vector3.Lerp
但这次我更愿意
矢量3.移向
因为两种功能的表现不同。
与
矢量3.lerp
,这样做就像
this
以下内容:
IEnumerator moveToX(Transform fromPosition, Vector3 toPosition, float duration)
{
float counter = 0;
Vector3 startPos = fromPosition.position;
while (counter < duration)
{
counter += Time.deltaTime;
fromPosition.position = Vector3.Lerp(startPos, toPosition, counter / duration);
yield return null;
}
}
我也试着做同样的事
矢量3.移向
,但工作不正常。问题是移动在x时间或持续时间之前完成。而且,它移动不平稳。它跳到两个位置的中间,而不是位置b的末端。
这是使用
矢量3.移向
关于上述问题:
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;
}
}
你如何用
矢量3.移向
在X秒内和一个协程函数中?
请不要建议
矢量3.lerp
因为那不是我想用的。
编辑
以下内容:
更换
float time = Vector3.Distance(currentPos, toPosition) / duration;
具有
float time = Vector3.Distance(startPos, toPosition) / (duration * 60f);
但当焦点从unity转移到另一个应用程序时会引入一个问题。这样做会导致运动无法完成。每帧计算一次而不是在开始计时之前计算一次似乎更合理。
Matrixtai的答案解决了这两个问题。