Unity C#で一定時間処理を待機させる方法/yield return new WaitForSecondsの使い方

IT

yield returnで待機時間を指定することにより、処理を一時的に停止させ、なめらかに色や動きを制御するなどの処理が可能となります。
ここでは少しずつ透明度を変化させる処理を実装してみます。

スポンサーリンク

成果物

cat3
少しずつ透明度を変化させ、じわっと猫を登場させてみます。

待機処理の実装(yield return new WaitForSeconds)

cat1
猫A、猫Bを置いておきます。
cat2
猫にそれぞれスプライトをアタッチし、初期状態でSetActiveをfalseにして隠しておきます。
cat3
クリックすると猫を出すオブジェクト(ここでは棚)にアタッチしているスクリプトを開き、public GameObjectで猫AB用の変数を作って、インスペクターでオブジェクトをセットします。
cat4
所定のタイミングで猫のSetActiveをtrueにしてやれば、
cat
とりあえず猫をぱっと出すことができます。
cat5
今回は透明度をじわじわ変更させたいので、まず空中の猫の透明度を0にしておき、
cat10
棚のスクリプトで、StartCoroutine(“メソッド名”);と記述します。実行するメソッドはこの後作ります。
待機処理をさせるにはコルーチンという仕組みを挟む必要があり、コルーチンを実行させる命令がStartCoroutineとなります。
cat13
コルーチン部分を作っていきます。
IEnumerator メソッド名()のように記述し、メソッド名はわかりやすいものを付けます。StartCoroutineとメソッド名は一致させてください。
cat7
さらにその中にyield return new WaitForSeconds(秒数f);と記述します。書いた時間だけ処理を待機させる命令です。
cat9
コルーチンの中にWhile文で繰り返しを作り、透明度を0.1fずつ引き上げる処理を10回繰り返させ、毎回ループの終わりに待機処理を行います。1fになると透明度が0ということになります。
cat2
この状態で大体完成していて、
cat11
ループが終わった後に空中の猫を消して、地上の猫を登場させれば、
cat3
冒頭の表現が完成します。

1フレーム分待機(yield return null;)

cat12
WaitForSecondsの代わりにyield return null;と指定すると、1フレーム分の時間だけ処理を待機させることができます。
cat4
実行結果です。ほとんど透明度を変えた意味がないですが、ごく短い時間待機処理がされていることが確認できます。

その他の待機処理実装例

//Unity C#
    void OnMouseDown()
    {
    (略)
         text.text = "引き出しが開いた";
         GetComponent().PlayOneShot(sound);
     //コルーチン呼び出し
         StartCoroutine("fall");
    (略)
    }

  //コルーチン実行
    IEnumerator fall()
    {
        int i = 1;
        while (i <= 10)
        {
            cat2.SetActive(true);
            cat2.GetComponent<SpriteRenderer>().color += new Color(0, 0, 0, 0.1f);
            i++;
            //0.1秒待機
            yield return new WaitForSeconds(0.1f);
        }
        cat2.SetActive(false);
        cat.SetActive(true);
    }

完成品はこちら

やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。

コメント