yield returnで待機時間を指定することにより、処理を一時的に停止させ、なめらかに色や動きを制御するなどの処理が可能となります。
ここでは少しずつ透明度を変化させる処理を実装してみます。
成果物
![cat3](https://sunagitsune.com/wp-content/uploads/2021/08/cat3.gif)
少しずつ透明度を変化させ、じわっと猫を登場させてみます。
待機処理の実装(yield return new WaitForSeconds)
![cat1](https://sunagitsune.com/wp-content/uploads/2021/08/cat1.png)
猫A、猫Bを置いておきます。
![cat2](https://sunagitsune.com/wp-content/uploads/2021/08/cat2.png)
猫にそれぞれスプライトをアタッチし、初期状態でSetActiveをfalseにして隠しておきます。
![cat3](https://sunagitsune.com/wp-content/uploads/2021/08/cat3.png)
クリックすると猫を出すオブジェクト(ここでは棚)にアタッチしているスクリプトを開き、public GameObjectで猫AB用の変数を作って、インスペクターでオブジェクトをセットします。
![cat4](https://sunagitsune.com/wp-content/uploads/2021/08/cat4.png)
所定のタイミングで猫のSetActiveをtrueにしてやれば、
![cat](https://sunagitsune.com/wp-content/uploads/2021/08/cat.gif)
とりあえず猫をぱっと出すことができます。
![cat5](https://sunagitsune.com/wp-content/uploads/2021/08/cat5.png)
今回は透明度をじわじわ変更させたいので、まず空中の猫の透明度を0にしておき、
![cat10](https://sunagitsune.com/wp-content/uploads/2021/08/cat10-1.png)
棚のスクリプトで、StartCoroutine(“メソッド名”);と記述します。実行するメソッドはこの後作ります。
待機処理をさせるにはコルーチンという仕組みを挟む必要があり、コルーチンを実行させる命令がStartCoroutineとなります。
待機処理をさせるにはコルーチンという仕組みを挟む必要があり、コルーチンを実行させる命令がStartCoroutineとなります。
![cat13](https://sunagitsune.com/wp-content/uploads/2021/08/cat13.png)
コルーチン部分を作っていきます。
IEnumerator メソッド名()のように記述し、メソッド名はわかりやすいものを付けます。StartCoroutineとメソッド名は一致させてください。
IEnumerator メソッド名()のように記述し、メソッド名はわかりやすいものを付けます。StartCoroutineとメソッド名は一致させてください。
![cat7](https://sunagitsune.com/wp-content/uploads/2021/08/cat7.png)
さらにその中にyield return new WaitForSeconds(秒数f);と記述します。書いた時間だけ処理を待機させる命令です。
![cat9](https://sunagitsune.com/wp-content/uploads/2021/08/cat9.png)
コルーチンの中にWhile文で繰り返しを作り、透明度を0.1fずつ引き上げる処理を10回繰り返させ、毎回ループの終わりに待機処理を行います。1fになると透明度が0ということになります。
![cat2](https://sunagitsune.com/wp-content/uploads/2021/08/cat2.gif)
この状態で大体完成していて、
![cat11](https://sunagitsune.com/wp-content/uploads/2021/08/cat10.png)
ループが終わった後に空中の猫を消して、地上の猫を登場させれば、
![cat3](https://sunagitsune.com/wp-content/uploads/2021/08/cat3.gif)
冒頭の表現が完成します。
1フレーム分待機(yield return null;)
![cat12](https://sunagitsune.com/wp-content/uploads/2021/08/cat12.png)
WaitForSecondsの代わりにyield return null;と指定すると、1フレーム分の時間だけ処理を待機させることができます。
![cat4](https://sunagitsune.com/wp-content/uploads/2021/08/cat4.gif)
実行結果です。ほとんど透明度を変えた意味がないですが、ごく短い時間待機処理がされていることが確認できます。
その他の待機処理実装例
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);
}
完成品はこちら。
![](https://sunagitsune.com/wp-content/uploads/2021/07/computer-1343393_1280-160x90.jpg)
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。
コメント