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の時期に書き始めているので、それより前のバージョンについては言及しません。
コメント