Updateの中で一度だけ実行させたい場合、どのようにスクリプトを作ればいいでしょうか。
今回はBoolを使った方法を試してみましょう。
ずっと移動していく中で、ある距離まで行くと、90°回転を1回だけ実行させます。
関連記事:
90°回転して叩くような動き
4つの座標で回転して四角形に動く
Updateの中で1回実行
CubeTurn.csを作成して、Cubeに追加します。
CubeTurn.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeTurn : MonoBehaviour { private int counter = 0; private float move = 5.0f; private bool turnBool = false; void Update() { Vector3 position = new Vector3(0, 0, move*Time.deltaTime); transform.Translate(position); counter++; if (counter == 100) { if (!turnBool) { turnBool = true; transform.Rotate(new Vector3(0, 90, 0)); } } } } |
プレイして動きを見てみましょう。
90度回転を、Boolで制御しています。
counterが100になり、turnBoolがfalseの場合、右に回転。
このようにBoolでフラグを作れば、Updateメソッドの中でも、一回だけ実行させることができます。
1回実行を定期的にくり返す
次は、実行のタイミングで、counterを0、turnBoolを0に戻してみましょう。
もう一度CubeTurn.csを開き、コードを2行追加します。
追加の箇所にはコメント(//)を入れています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeTurn : MonoBehaviour { private int counter = 0; private float move = 5.0f; private bool turnBool = false; void Update() { Vector3 position = new Vector3(0, 0, move*Time.deltaTime); transform.Translate(position); counter++; if (counter == 100) { if (!turnBool) { turnBool = true; transform.Rotate(new Vector3(0, 90, 0)); turnBool = false; //フラグをfalseに戻す counter = 0; //カウンターを0に戻す } } } } |
プレイして動きを確認しましょう。
回転する度に、counterとturnBoolが初期値に戻るため、四角形を描く動きになりました。