3点間を順に移動するスクリプトを作成してみましょう。
指定した3つのポイントで方向を変えながら、反時計回りに移動をくり返しています。
障害物や敵キャラに対し、決まった動作をつけたい場合などに使えそうな仕組みです。
関連記事:
2点間の往復運動をくり返す
4つの座標で回転して四角形に動く
オブジェクトの往復運動をつくる
キャラクターを行ったり来たりさせる
特定の座標まで行けば跳ね返る
行き帰りできるムービングウォーク
特定の座標で移動を止める
Updateを使わずに特定の座標まで移動
複数地点で向きを変える
方向転換する3つの地点をつくります。
空のオブジェクトを3つ作成し、それぞれの名前を、PointA、PointB、PointCに変更。
すべてスフィアコライダーを付け、サイズを0.1にして、トリガーにするにチェック。
わかりやすいようにアイコンを設定し、それぞれ座標を設定します。
ここでは以下のように設定しました。
シーンビューで確認すると、このように三角形をつくっています。
続いて、移動体であるCubeを作成します。
リジッドボディを追加し、IsKinematicにチェックを入れます。
CubeMove.csを作成し、Cubeに追加します。
CubeMove.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { private float speed = 10.0f; private int count = 1; [SerializeField] Transform pointA; [SerializeField] Transform pointB; [SerializeField] Transform pointC; void Update() { if(count == 0) transform.position = Vector3.MoveTowards(transform.position, pointA.position, speed * Time.deltaTime); else if(count == 1) transform.position = Vector3.MoveTowards(transform.position, pointB.position, speed * Time.deltaTime); else if(count == 2) transform.position = Vector3.MoveTowards(transform.position, pointC.position, speed * Time.deltaTime); } void OnTriggerEnter(Collider other) { if (other.gameObject.name == "PointA") count = 1; else if (other.gameObject.name == "PointB") count = 2; else if (other.gameObject.name == "PointC") count = 0; } } |
PointA、PointB、PointCのフィールドに、それぞれのオブジェクトを入れます。
ゲームプレイしてみましょう。
3つのポジションで向きを変えながら、ずっと移動を続けます。
関連記事:
2点間の往復運動をくり返す
4つの座標で回転して四角形に動く
オブジェクトの往復運動をつくる
キャラクターを行ったり来たりさせる
特定の座標まで行けば跳ね返る
行き帰りできるムービングウォーク
特定の座標で移動を止める
Updateを使わずに特定の座標まで移動