前回の続き、今回は複数のコルーチンの終了を待ちます。例えばBGMをフェードアウトしつつキャラクタのα値を0にジワジワ変化させ、音量もα値も0になってから何かをしたい、などというときに使えます。例によって最短のコードで説明します。まず、前回と同じく単純に2秒、5秒待つコルーチンを定義しておきます。
//--------------------------------
IEnumerator cor1() {
Debug.Log("cor1()開始");
yield return new WaitForSeconds(2f);
Debug.Log("cor1()終了");
}
//--------------------------------
IEnumerator cor2() {
Debug.Log("cor2()開始");
yield return new WaitForSeconds(5f);
Debug.Log("cor2()終了");
}
//--------------------------------
続いて、これらをコールするコルーチンです。
//--------------------------------
IEnumerator corB() {
Debug.Log("corB開始");
Coroutine cr1 = StartCoroutine(cor1());
Coroutine cr2 = StartCoroutine(cor2());
yield return cr1;
yield return cr2;
Debug.Log("corB終了");
}
//--------------------------------
これで実験の準備完了です。
StartCoroutine(corB());
を実行すると、一緒にスタートしたcor1(), cor2()の両方が実行を終了してから
Debug.Log("corB終了");
が実行されることが分かります。
Coroutine cr1 = StartCoroutine(cor1());
Coroutine cr2 = StartCoroutine(cor2());
yield return cr1;
yield return cr2;
で2つのコルーチンの実行終了を待つことになるわけですね。これも使えそうです!!
なお、念のため
yield return cr1;
yield return cr2;
の順番を入れ換えて試しましたが、結果は変わりませんでした。