オブジェクトを左右に自動で移動(一定範囲を往復移動)【Unityメモ】

Untiyの2Dゲームでオブジェクトを左右に自動で動かしてみます。決められた範囲を往復で移動する感じです。

はじめに

Unityのバージョンは2021.3.14f1です。

決められた範囲を移動する床や敵を想定した感じでオブジェクトを簡単に自動移動させてみます。

実装開始

まずは簡単な往復移動を実装して、次に指定位置まで移動するのを実装していきます。

簡単な往復移動

Hierarchyメニューで右クリック「2DObject」→「Sprite」→「Square」を追加。

AutoMoveと言う名前でスクリプトをアタッチします。

スクリプトの中身を下記に変更します。

using UnityEngine;

public class AutoMove : MonoBehaviour
{
    private float MoveSpeed = 3.0f;

    void FixedUpdate()
    {
        transform.position = new Vector3(Mathf.Sin(Time.time) * MoveSpeed, 0, 0);
    }
}

Mathf.Sinは-1~1の間を動く波みたいなイメージです。X座標の位置を移動しています。

実行すると下記のように初期位置から左右均等に往復移動をします。

MoveSpeedを変更すると移動範囲が変わります。波のような移動なので端に行くとスピードがゆっくりになります。

移動先をポイントで指定

次は移動先(移動範囲)を指定して自動移動させます。

Hierarchyメニューで右クリック、「Create Empty」で空のオブジェクトを追加、Pointと言う名前にしておきます。

配下に2つ空のオブジェクトを追加し、leftEdgeとRightEdgeと言う名前にしておきます。TransformのPositionを入力し移動先(移動範囲)を指定します。

スクリプトを下記に変更。

using UnityEngine;

public class AutoMove : MonoBehaviour
{
    [SerializeField] private Transform _LeftEdge;
    [SerializeField] private Transform _RightEdge;

    private float MoveSpeed = 3.0f;
    private int direction = 1;

    void FixedUpdate()
    {
        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 + MoveSpeed * Time.fixedDeltaTime * direction, 0, 0);
    }
}

パラメータを指定します。

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

均等な速度で移動します。

タイトルとURLをコピーしました