遊テックプログラミング教室

プログラミングノートNOTE

Unityで1秒待つ

概要

Scratchでは「1秒待つ」のブロックは良く使ったと思いますが、Unityで1秒待つにはどうすればいいかを紹介します。

Unityで「1秒待つ」の処理を行うには「コルーチン」というものを使います。

コルーチンとは、一言でいうと、フレームをまたいで処理出来る関数のことです。

通常の関数は、1フレーム内で処理が完了するのに対し、コルーチンは、関数の途中で実行を停止して Unity へ制御を戻し、その次のフレームで(あるいは指定の秒数後に)停止したところから続行することができます。

ちょっと難しい感じがしますが、コード自体はシンプルなのでぜひ使ってみましょう。

具体例

Cubeの色が信号機のように、

青→(1秒待つ)→黄→(1秒待つ)→赤と変わるコードは以下になります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeColorChanger : MonoBehaviour
{
    Renderer cubeRenderer;

    void Start()
    {
        // キューブのRendererを取得
        cubeRenderer = GetComponent<Renderer>();

        // Coroutine(コルーチン)を開始
        StartCoroutine(Singou());
    }

    IEnumerator Singou()
    {
        cubeRenderer.material.color = Color.blue;

        yield return new WaitForSeconds(1f);//1秒待つ

        cubeRenderer.material.color = Color.yellow;

        yield return new WaitForSeconds(1f);//1秒待つ

        cubeRenderer.material.color = Color.red;
    }
}

解説

ここではSingou(信号)という名前のコルーチンを作る例で説明します。

戻り値の型を「IEnumerator」として、「Singou」という名前の関数を作ります。これがコルーチンとなります。

この関数内で1秒待たせたいところに、「yield return new WaitForSeconds(1f);」と書きます。1.5秒待たせたければ、1.5fにします。

このコルーチンを実行するために、「StartCoroutine(Singou());」が必要です。StartCoroutineメソッドの引数にコルーチンを指定しています。