前回の続きです。コルーチンの使い方をまとめます。
(使用例4)5秒経ったら何かする
StartCoroutine(wait5()); …… IEnumerator wait5() { Debug.Log("●●●"); yield return new WaitForSeconds(5f); //(A) Debug.Log("●●●5秒経ったよ"); }
StartCoroutine(wait5())
でコルーチンを実行します。wait5()では(A)のところで5秒間、実行が止まります。その後次の行が実行されます。
(使用例5)フラグを監視し、trueになったら何かする
StartCoroutine(checkFlag()); …… IEnumerator checkFlag() { while (!flag) { yield return new WaitForEndOfFrame(); //(B) } Debug.Log("●●●フラグが立ったよ"); }
checkFlag()を見てください。flagがfalseである間、(B)が実行されますが、
yield return new WaitForEndOfFrame(); //(B)
は「次のフレームに再開する」という意味です。つまり、(B)の行で実行はいったん止まり、その下の行が実行されるのは次のフレームだということです。「その下の行」は、ここでは「}」(whileループの最後)ですから、結局次のフレームでwhileループの先頭に戻ることになります。こうして1フレームに1回、flagをチェックします。flagがtrueになればwhileループから抜け、
Debug.Log("●●●フラグが立ったよ")
が実行されます。
yield にはいろいろな書き方があるみたいです。前回、今回で
yield return new WaitForSeconds(1f)
yield return new WaitForEndOfFrame()
というのが出てきました。どちらも「実行をいつまで止めておくか」を意味する書き方でした。多分このくらいでもいろいろ使えて便利そうです。