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

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

Unityで、コルーチンの終了を待って別のコルーチンを起動する

タイトルの通りです。ゲーム製作で、例えばキャラクタをコルーチンでどこかへ移動し、続いて別のコルーチンでα値を0に変えたい(透明にしたい)、などというときです。最も単純なコードで説明します。まずコルーチンを2つ、定義しておきます。単純に、それぞれ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 corA() {
        Debug.Log("corA()開始");
        Coroutine cr1 = StartCoroutine(cor1());
        yield return cr1;
        StartCoroutine(cor2());
        Debug.Log("corA()終了");
    }
    //--------------------------------

これで準備できました。

StartCoroutine(corA());

でコルーチンcorA()を実行します。コンソールの表示(特に時刻)を見ればちゃんとcor1()が終わってからcor2()が実行されていることが分かります。

        Coroutine cr1 = StartCoroutine(cor1());
        yield return cr1;

でcor1()の終了を待つことになるのですね。これは便利そう……!!! もちろん、cor1()の終了後に別のコルーチンではなく、他の通常の関数の実行もできます。

 

いつも勉強させていただいております。ありがとうございます!! やさしく、Unityの説明をしてくださっています。

shibuya24.info