2017-06-05 11 views
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(); 
    } 
} 
+0

1.「clearLighteningTargets」コルーチンをどのように呼び出すかをご紹介します。 'lighteningDestroyList'がどのようにクリアされているかを示します。 – Programmer

+0

あなたはエラーが発生していますか?多分clearDestroyStackにエラーがあり、スクリプトがクラッシュする – Lestat

+0

@Lestat表示されているエラーはありません –

答えて

0

あります。

関連する問題