今回は、Untiyの2Dゲームでオブジェクトを左右に自動で動かしてみます。
決められた範囲を往復で移動する感じです。
はじめに
Unityのバージョンは2021.3.3f1です。
2通りの方法でオブジェクトを自動で動かします。決められた範囲を移動する床や敵を想定した感じです。
簡単な往復
まずは簡単な方法。
動かすオブジェクトを用意、「2DObject」→「Sprite」→「Circle」を追加。

下記スクリプトを作成。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AutoMove : MonoBehaviour { [SerializeField] private float _Speed; private Vector3 StartPosition; void Start() { StartPosition = transform.position; } void Update() { transform.position = new Vector3(Mathf.Sin(Time.time) * _Speed + StartPosition.x, StartPosition.y, StartPosition.z); } }
Mathf.Sinは-1~1の間を動く波みたいなイメージです。
このスクリプトをオブジェクトにアタッチしてSpeedを指定したら初期位置から左右均等に動きます。speedを早くすると移動範囲が広がります。
左右で長さを変える(移動先をポイント指定)
次は具体的に移動する位置(範囲)を指定したい場合です。
まずは空のオブジェクトを追加、Pointと言う名前にしておきます。
配下にはleftEdgeとRightEdgeを追加。Positionを入力し左方向、右方向の移動先(移動範囲)を指定します。

下記スクリプトに変更。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AutoMove : MonoBehaviour { [SerializeField] private float _Speed; [SerializeField] private Transform _LeftEdge; [SerializeField] private Transform _RightEdge; private Vector3 StartPosition; private int direction = 1; void Start() { StartPosition = transform.position; } void Update() { if (transform.position.x >= _RightEdge.position.x) direction = -1; if (transform.position.x <= _LeftEdge.position.x) direction = 1; transform.position = new Vector3(transform.position.x + _Speed * Time.deltaTime * direction, StartPosition.y, StartPosition.z); } }
オブジェクトにアタッチして、パラメータを指定。

下記の様な感じで、指定位置まで移動したら進行方向を切り替えて往復するように動きます。
