【发布时间】:2016-06-16 14:40:37
【问题描述】:
我正在运行一些协程,它们每隔几秒就将对象从一个位置移动到另一个位置。在某个时候,我想禁用他们的对撞机。在禁用它的对撞机之前,如何确保每个游戏对象都已完成“lerping”到新位置,以防止在跳跃过程中禁用对撞机?下面是相关代码:
IEnumerator moveObjToRight (Transform fromPosition, Vector3 toPosition, float duration, int newIndex) {
while (freePositions.Contains(objPositions[newIndex])) {
freePositions.Add (objPositions [newIndex - 1]);
filledPositions.Remove (objPositions [newIndex - 1]);
float counter = 0;
Transform startTrans = fromPosition;
freePositions.Remove (objPositions [newIndex]);
filledPositions.Add (objPositions [newIndex]);
while (counter < duration) {
counter += Time.deltaTime;
fromPosition.position = Vector3.Lerp (startTrans.position, toPosition, counter / duration);
yield return null;
}
if (newIndex < objPositions.Count) {
newIndex++;
if ((newIndex == 9) || !freePositions.Contains (objPositions [newIndex])) {
isMovingLeft = true;
yield return new WaitForSeconds (2.0f);
if (freePositions.Contains (objPositions [newIndex - 2])) {
toPosition = new Vector3(objPositions[newIndex - 2], startTrans.position.y, startTrans.position.z );
yield return StartCoroutine(moveObjToLeft(startTrans, toPosition, 1.0f, newIndex - 2));
}
else if (!freePositions.Contains (objPositions [newIndex - 2])) {
yield return new WaitForSeconds (3.0f);
toPosition = new Vector3(objPositions[newIndex - 2], startTrans.position.y, startTrans.position.z );
yield return StartCoroutine(moveObjToLeft(startTrans, toPosition, 1.0f, newIndex - 2));
}
}
}
startTrans.position = toPosition;
toPosition = new Vector3 (objPositions [newIndex], startTrans.position.y, startTrans.position.z);
int waitTime = Random.Range (3, 5);
yield return new WaitForSeconds (waitTime);
}
}
【问题讨论】:
-
如果不提供 lerp 代码,我们如何知道您的对象何时完成了 lerp?你不是新来的,你知道没有代码你不会得到合理的帮助。
-
@Programmer 我刚刚编辑了问题:)
-
对象在
while loop block has finished running.while (counter -
谢谢,解决了