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