転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

時間経過によるイベント処理を簡単に実装する - コルーチンの活用法

Unityでゲームを作る際、自分は時間経過があるイベントが欠かせません。
例えば、RPGで敵を倒した1秒後に報酬品をテキスト表示するなどです。

このような時間経過のイベントには、コルーチンを使います。
ですがこのコルーチン、自分はいつも使い方を忘れてしまいます。
docs.unity3d.com
毎回調べるのも面倒なので、メモとして残しておきます。

コルーチンの使い方

時間経過が必要な処理を書く場合、戻り値の方をIEnumeratorを指定します。
また、yieldも必ず記述が必要です。

IEnumerator ShowMessage() {

    yield return new WaitForSeconds(1.0f);
    finishMessage.gameObject.SetActive(true);
    finishMessage.text = "あなたのゴールタイムは\n" + tc.timerValue.ToString("N2") +"秒です";

    retryButton.SetActive(true);

}

この処理では、ShowMessageメソッドが呼び出されたら、1秒待ってからfinishMessageオブジェクトが有効となり、テキスト表示が行われます。
秒数指定をyield return new WaitForSecounds(1.0f)で行っています。


次に、ShowMessageメソッドの呼び出し方にも注意が必要です。

StartCoroutine(ShowMessage());

このように、StartCoroutineメソッドの引数に呼び出したいメソッドを指定する必要があります。

コルーチンの停止方法

コルーチンをスタートさせたら、止めたい場合もあると思います。
その時は、StopCoroutineを使います。

StopCoroutine(ShowMessage());

StopCoroutineは止めたいコルーチンを引数に指定していますが、複数のコルーチンをまとめて止めたい場合はStopAllCoroutinesを使います。

StopAllCoroutines();

docs.unity3d.com
docs.unity3d.com

自分の場合は、ここらへんを理解できていればゲームを作りで困ることはありません。