ここでは処理を一定時間待つことができるコルーチンについて説明します。
※この記事で使用しているUnityのバージョン:Unity2019.1
コルーチンとは?
コルーチンは処理を一定時間止めて待つことができる関数です。これを使うと、例えば「○○秒後に処理を実行する」といったことが簡単にできるのでとても便利です。
コルーチンの使い方
コルーチンの定義方法
コルーチンは「IEnumerator コルーチン名(){ 処理内容 }」のように定義します。IEnumeratorは「アイエニュメレーター」と読むそうです。
コルーチンを使うためには、スクリプトの最初のusing ○○のところに「using System.Collections;」を書いておいてください(※新しくC#スクリプトを作った時は最初から書かれています)。
処理を一定時間待つ方法
コルーチン内の任意の場所でyield returnステートメントを使います(yield returnステートメントはコルーチン内に必ず1つ以上書く必要があります)。
IEnumerator Timer() { Debug.Log("3秒待ちます。"); //3秒待つ yield return new WaitForSeconds(3); Debug.Log("3秒待ちました。"); }
例えば上記の例なら、「yield return new WaitForSeconds()」を使って処理を途中で3秒間待つということを行っています。
ちなみに処理の待ち方はいくつかあって、
- yield return null:1フレームだけ待つ
- yield return new WaitForEndOfFrame():そのフレームが終わるまで待つ
- yield return new WaitForSeconds(n):n秒待つ
などがあります。
コルーチンを開始・停止・中断させる方法
コルーチンの開始
コルーチンを開始させるにはStartCoroutineを使います。
void Start() { StartCoroutine(Timer()); }
上記の例ではStart内からTimerというコルーチンを開始させています。
ちなみに書き方は2通りあって、上の例なら
- StartCoroutine(“Timer”)
- StartCoroutine(Timer())
という風に書けます。お好きな方を使ってもらって構いません(※引数を渡したい場合は2番目の書き方を採用してください)。なお、普通のメソッドの呼び出しのような書き方だとコルーチンが実行されないので注意してください。
コルーチンの停止
次にコルーチンを停止させるにはStopCoroutineを使います。書き方はStartCoroutineのほうと同様です。
コルーチンの中断
yield return breakと書くと、そこでコルーチンの処理を中断させることができます。