コルーチン処理を分ける(コルーチンの中でコルーチンを呼ぶ)
まずは正解パターンから。
void Start() { StartCoroutine(coMain()); } IEnumerator coMain() { for(int i=0;i<3;++i) { yield return coSub(); } yield break; } IEnumerator coSub() { Debug.Log("Sub.Start"); yield return new WaitForSeconds(1.0f); Debug.Log("Sub.End"); }
こう書くことで、コルーチンの処理を分割できます。
結果は、「"Sub.Start"→1秒待機→"Sub.End"」を3回繰り返します。
利用できるのはUnity5.3から?
参考
Unity5.3から、コルーチン内でコルーチンを呼び出しやすくなった | Unity用ビジュアルノベルツール「宴」
間違えた
サブコルーチン?を呼ぶときに
yield return coSub();
と書かずに、
coSub();
と書くと中のWaitForSeconds(1.0f) は機能せずに戻ってきました。
while(true) { coSub(); }
と書くとフリーズします(waitが一切ない永久ループ)
気づくまでフリーズ再起動祭りでした。
おまけ
フレーム単位で待機したい
IEnumerator WaitFixedFrame(int frame) { for(int i = 0; i < frame; ++i) { yield return new WaitForFixedUpdate(); } } ... yield return WaitFixedFrame(15); // 15F待機
これやりたかった。