指定した2つの地点間で、往復運動できるように、スクリプトを作成してみましょう。
自由に地点を指定できるため、斜めの動きも可能になります。
AとB、2つの位置にオブジェクトを置いて、この2点間の距離を往復移動します。
関連記事:
オブジェクトの往復運動をつくる
片方だけの伸縮をくり返す
キャラクターを行ったり来たりさせる
右回転と左回転をくり返す
移動してn秒間ストップをくり返す
クリックで動きを中断・再開する
行き帰りできるムービングウォーク
3地点で方向転換しながら移動し続ける
往復ループの地点となるオブジェクト
AB間の地点として、空のオブジェクトを2つ作成します。
名前を、PointA、PointBとしました。
それぞれの位置を離して、わかりやすいようにアイコンを設定。
スフィアコライダーを追加し、トリガーにするにチェックを入れ、半径を0.1にします。
PointAはこのように設定しました。
PointBはこのように設定しました。
移動体として、オブジェクトを作成しましょう。
Cubeを作成し、リジッドボディを追加。
Is Kinematicにチェックを入れます。
シーンビューを斜めから確認すると、このように見えています。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { private float speed = 10.0f; private bool flag; [SerializeField] Transform pointA; [SerializeField] Transform pointB; void Update() { if(flag) transform.position = Vector3.MoveTowards(transform.position, pointB.position, speed * Time.deltaTime); else if(!flag) transform.position = Vector3.MoveTowards(transform.position, pointA.position, speed * Time.deltaTime); } void OnTriggerEnter(Collider other) { if (other.gameObject.name == "PointA") flag = true; else if (other.gameObject.name == "PointB") flag = false; } } |
PointA、PointBそれぞれのフィールドに、地点となるオブジェクトを入れます。
ゲームプレイしてみましょう。
AとB、2つの地点間で、往復移動を続けます。
PointA、PointBの座標を動かすことで、かんたんに地点を変更することができます。
関連記事:
オブジェクトの往復運動をつくる
片方だけの伸縮をくり返す
キャラクターを行ったり来たりさせる
右回転と左回転をくり返す
移動してn秒間ストップをくり返す
クリックで動きを中断・再開する
行き帰りできるムービングウォーク
3地点で方向転換しながら移動し続ける