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

少しずつ透明度を変化させ、じわっと猫を登場させてみます。
待機処理の実装(yield return new WaitForSeconds)

猫A、猫Bを置いておきます。

猫にそれぞれスプライトをアタッチし、初期状態でSetActiveをfalseにして隠しておきます。

クリックすると猫を出すオブジェクト(ここでは棚)にアタッチしているスクリプトを開き、public GameObjectで猫AB用の変数を作って、インスペクターでオブジェクトをセットします。

所定のタイミングで猫のSetActiveをtrueにしてやれば、

とりあえず猫をぱっと出すことができます。

今回は透明度をじわじわ変更させたいので、まず空中の猫の透明度を0にしておき、

棚のスクリプトで、StartCoroutine(“メソッド名”);と記述します。実行するメソッドはこの後作ります。
待機処理をさせるにはコルーチンという仕組みを挟む必要があり、コルーチンを実行させる命令がStartCoroutineとなります。
待機処理をさせるにはコルーチンという仕組みを挟む必要があり、コルーチンを実行させる命令がStartCoroutineとなります。

コルーチン部分を作っていきます。
IEnumerator メソッド名()のように記述し、メソッド名はわかりやすいものを付けます。StartCoroutineとメソッド名は一致させてください。
IEnumerator メソッド名()のように記述し、メソッド名はわかりやすいものを付けます。StartCoroutineとメソッド名は一致させてください。

さらにその中にyield return new WaitForSeconds(秒数f);と記述します。書いた時間だけ処理を待機させる命令です。

コルーチンの中にWhile文で繰り返しを作り、透明度を0.1fずつ引き上げる処理を10回繰り返させ、毎回ループの終わりに待機処理を行います。1fになると透明度が0ということになります。

この状態で大体完成していて、

ループが終わった後に空中の猫を消して、地上の猫を登場させれば、

冒頭の表現が完成します。
1フレーム分待機(yield return null;)

WaitForSecondsの代わりにyield return null;と指定すると、1フレーム分の時間だけ処理を待機させることができます。

実行結果です。ほとんど透明度を変えた意味がないですが、ごく短い時間待機処理がされていることが確認できます。
その他の待機処理実装例
While文の解説記事ですが、待機処理を使ってラジオを左右に揺らす処理を実装しています。
//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の時期に書き始めているので、それより前のバージョンについては言及しません。
 
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
  
  
  
  


コメント