コルーチンが呼び出されない

C/C++でいうsleep的なことをしたい場合、Unityではyield文とコルーチンを使う。
OnTriggerEnterでコルーチンを使おうとこんな実装をしてみた

void OnTriggerEnter(Collider other)
{
	gotoTitle();
}

IEnumerator gotoTitle()
{
	yield return new WaitForSeconds(2.0f);
	Application.LoadLevel("Title");
}

しかし、まったくもってgotoTitleが呼ばれている気配がない。
どうも、コルーチンの中でコルーチンを呼び出すことはできないらしい。そして、イベントハンドラはコルーチンであるということがわかった。
これを回避するためにはStartCoroutineを使えばいいようだ、先ほどのコードを修正してみると、期待通りの動作をしてくれた。

void OnTriggerEnter(Collider other)
{
	StartCoroutine(gotoTitle());
}

IEnumerator gotoTitle()
{
	yield return new WaitForSeconds(2.0f);
	Application.LoadLevel("Title");
}

参考
Overview: Coroutines & Yield
MonoBehaviour.StartCoroutine

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください