0
私は、ゲームオブジェクトのキューがクリアされるまで、各実行の間に一時停止しながら、ゲームオブジェクトのキューから破壊するコルーチンを実行しようとしています。私は開始関数と更新関数に入れてみました。同じ結果が1回だけ実行されます。コルーチンは、clearDestroyStack関数なしでうまく動作します。c#なぜ私のコルーチンはwhileループの条件に関係なく1回だけ実行しますか?
すべてのコードは、キューにあるゲームオブジェクトに添付されたスクリプト内にあります。
この
はコルーチンで次の呼び出しif (lightningListFilled) {
StartCoroutine ("clearLighteningTargets");
lightningListFilled = false;
}
else {
}
です。
IEnumerator clearLighteningTargets(){
while (lighteningDestroyList.Count > 0) {
Debug.Log ("From clear: "+lighteningDestroyList.Count);
refScript.destroyStack.Push (lighteningDestroyList.Dequeue());
refScript.clearDestroyStack();
yield return new WaitForSeconds (0.5f);
Debug.Log ("From clear: "+lighteningDestroyList.Count);
}
}
これは、それらが結合しているオブジェクトが破棄される場合コルーチン停止clearDestroyStack関数のコード
public void clearDestroyStack(){
while (destroyStack.Count != 0) {
GameObject ballToDestroy = destroyStack.Pop();
List<GameObject> ballToDestroyParents = ballToDestroy.GetComponent<MoveToCenter>().parents;
List<GameObject> ballToDestroyChildren = ballToDestroy.GetComponent<MoveToCenter>().children;
foreach (GameObject parent in ballToDestroyParents) {
if (parent != null) {
if (parent.GetComponent<MoveToCenter>().children.Contains (ballToDestroy)) {
parent.GetComponent<MoveToCenter>().children.Remove (ballToDestroy);
}
}
}
foreach (GameObject child in ballToDestroyChildren) {
if (child != null) {
if (child.GetComponent<MoveToCenter>().parents.Contains (ballToDestroy)) {
child.GetComponent<MoveToCenter>().parents.Remove (ballToDestroy);
}
}
}
GameObject[] allBalls = GameObject.FindGameObjectsWithTag ("ball");
foreach (GameObject ball in allBalls) {
ball.GetComponent<MoveToCenter>().isSafe = false;
}
Destroy (ballToDestroy);
//startSafeScan();
//deleteUnsafeBalls();
//clearDestroyStack();
}
}
1.「clearLighteningTargets」コルーチンをどのように呼び出すかをご紹介します。 'lighteningDestroyList'がどのようにクリアされているかを示します。 – Programmer
あなたはエラーが発生していますか?多分clearDestroyStackにエラーがあり、スクリプトがクラッシュする – Lestat
@Lestat表示されているエラーはありません –