タイトルの通りです。ゲーム製作で、例えばキャラクタをコルーチンでどこかへ移動し、続いて別のコルーチンでα値を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の説明をしてくださっています。
⬇