質問: Random.Range(0.1f, 1.5f); yield return new WaitForSeconds(waitSec); Debug.Log ("サブコルーチン処理" + s + "2"); } } ```
回答: WaitUntilを使って待ち合わせという方法もあると思います。 それぞれのコルーチンの中で完了したらカウンターを操作し、その数を見る形です。 コルーチンにコールバック処理を渡せるようにすると、処理の流れが追いやすくなります。 ``` IEnumerator MainCoroutine(){ Debug.Log ("メインコルーチン処理1"); yield return new WaitForSeconds(0.5f); Debug.Log ("メインコルーチン処理2"); yield return new WaitForSeconds(0.5f); // 呼ばれるたびに i をカウントアップするcallback int i = 0; System.Action callback = () => i++; StartCoroutine (SubCoroutine("A", callback)); StartCoroutine (SubCoroutine("B", callback)); StartCoroutine (SubCoroutine("C", callback)); // i が 3 になるまで待つ yield return new WaitUntil (() => i == 3); Debug.Log ("メインコルーチン処理3"); yield return new WaitForSeconds(0.5f); Debug.Log ("メインコルーチン処理4"); yield return new WaitForSeconds(0.5f); } IEnumerator SubCoroutine(string s, System.Action callback){ Debug.Log ("サブコルーチン処理" + s + "1"); float waitSec = Random.Range(0.1f, 1.5f); yield return new WaitForSeconds(waitSec); Debug.Log ("サブコルーチン処理" + s + "2"); // 処理が終了したらcallback callback(); } ``` !イメージ説明