オブジェクトに接しながら、周りを動いていく仕組みをつくってみましょう。
壁の外周に沿って、Cubeがずっと動き続けています。
Cubeが方向転換するタイミングは、4つの条件分岐の中に、それぞれフラグを立てます。
関連記事:
触れている間はイベントを発生させる
床の外側に沿って移動をくり返す
オブジェクトに触れていれば動く
対象オブジェクトを中心に90度ずつ方向転換
Updateの中で1度だけ実行
Cubeを作成し、サイズを変更します。
もう一つCubeを作成し、色を変更。
座標を変更します。
2つのオブジェクトがこのように配置されています。
PlayerMove.csを作成し、Playerに追加します。
PlayerMove.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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { private bool xBool; private bool yBool; private float move; void Start() { move = 0.05f; xBool = false; yBool = false; } void Update() { Vector3 position = new Vector3(move, 0, 0); transform.Translate(position); //1番目の回転 if (float.Parse(this.transform.position.x.ToString("f2")) == 3.0f) { if (!xBool) //xBoolがfalseの場合 { xBool = true; //xBoolをtrueにする transform.Rotate(new Vector3(0, 0, -90)); } } //2番目の回転 if (float.Parse(this.transform.position.y.ToString("f2")) == -3.0f) { if (!yBool) //yBoolがfalseの場合 { yBool = true; //yBoolをtrueにする transform.Rotate(new Vector3(0, 0, -90)); } } //3番目の回転 if (float.Parse(this.transform.position.x.ToString("f2")) == -3.0f) { if (xBool) //xBoolがtrueの場合 { xBool = false; //xBoolをfalseにする transform.Rotate(new Vector3(0, 0, -90)); } } //4番目の回転 if (float.Parse(this.transform.position.y.ToString("f2")) == 3.0f) { if (yBool) //yBoolがtrueの場合 { yBool = false; //yBoolをfalseにする transform.Rotate(new Vector3(0, 0, -90)); } } } } |
ゲームプレイしてみましょう。
Parseを使って"f2"と指定しすれば、小数第二位で切った数値を見ることができます。
また、四つ角ごとに90°回転しなかればなりませんが、Updateの中であれば、一瞬の間に、何回も実行されることがあります。
そのため、xBoolとyBoolの2つのフラグを用意し、Updateの中で一度だけ実行できるようにしています。
関連記事:
触れている間はイベントを発生させる
床の外側に沿って移動をくり返す
オブジェクトに触れていれば動く
対象オブジェクトを中心に90度ずつ方向転換