0
数秒ごとにオブジェクトをある位置から別の位置に移動させるいくつかのコルーチンを実行しています。ある時点で、私は彼らの衝突を無効にしたいと思います。どのようにして、各ゲームオブジェクトが飛び越しの過程で衝突者を無効にするのを防ぐために、それを無効にする前に、新しい位置に 'lerping'を完了させることができますか?collider2dを無効にする前にlerpが終了したことを確認する方法
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コードを提供しなければ、あなたのオブジェクトがlerping行われているときに我々は知ることができますか?あなたはここでは新しい人ではなく、コードなしであなたは妥当な助けを手に入れません。 – Programmer
@Programmer質問を編集したばかりです: – Nullititiousness
オブジェクトはwhileループブロックの実行が終了した後に移動します。 'while(counter
Programmer