Alpaca Tech Blog

ゲーム作る系 草食動物の備忘録

【Unity】コルーチンの中でコルーチンを呼ぼうとしてミスった

コルーチン処理を分ける(コルーチンの中でコルーチンを呼ぶ)

まずは正解パターンから。 

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待機

これやりたかった。