処理を一定時間待つコルーチンの使い方

ここでは処理を一定時間待つことができるコルーチンについて説明します。


※この記事で使用している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通りあって、上の例なら

  1. StartCoroutine(“Timer”)
  2. StartCoroutine(Timer())

という風に書けます。お好きな方を使ってもらって構いません。なお、普通のメソッドの呼び出しのような書き方だとコルーチンが実行されないので注意してください。

コルーチンの停止

次にコルーチンを停止させるにはStopCoroutineを使います。書き方はStartCoroutineのほうと同様です。

コルーチンの中断

yield return breakと書くと、そこでコルーチンの処理を中断させることができます。