いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

Unityで、複数のコルーチンの終了を待機する

前回の続き、今回は複数のコルーチンの終了を待ちます。例えば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;

の順番を入れ換えて試しましたが、結果は変わりませんでした。