コルーチンAがコルーチンBを起動します。Aが止まったとき、Bはどうなるのでしょうか。Aが yield break; で止まったとしましょう。何となく、多分BはAと無関係に動き続けるんだろう、……と考えていました。今までそのつもりでコードを書いていたんですが、思い立って実験してみました。コルーチンtest1()、test2()を用意し、
StartCoroutine(test1());
を実行します。test1()では最初にコルーチンtest2()を実行し、10回のループを回して1秒ごとにカウントアップしながら変数の値を表示します。10回でtest1()は止まります。test2()は1秒ごとに変数をカウントアップし、表示します。
//----------------------------------
IEnumerator test1() {
int ct1 = 0;
StartCoroutine(test2());
for(int i = 0; i < 10; i++){
Debug.Log("ct1 = " + ct1);
ct1++;
yield return new WaitForSeconds(1f);
}
yield break;
}
//----------------------------------
IEnumerator test2() {
int ct2 = 0;
while (true) {
Debug.Log("ct2 = " + ct2);
ct2++;
yield return new WaitForSeconds(1f);
}
}
//----------------------------------
結果は以下の通りです。
ct2 = 0
ct1 = 0
ct2 = 1
ct1 = 1
ct2 = 2
ct1 = 2
……
ct2 = 9
ct1 = 9
ct2 = 10
ct2 = 11
ct2 = 12
……
要するに、やはりコルーチンから実行されたコルーチンは、もとのコルーチンが止まっても動き続けるということです。そりゃそうだよね……ですが、実験は大事です。