transform.Translateの移動方向(ローカル座標系、ワールド座標系)

2024年3月13日

transform.Translateの動作

transform.Translate(Vp, t)

Vector3 Vp(x, y, z)の方向・距離へ移動します。
t省略時は「t = Space.Self」となります。
t = Space.Self:ローカル座標系を基準に移動します。
t = Space.World:ワールド座標系を基準に移動します。

 transform.Translate(new Vector3(1,2,3),Space.World);

サンプル

デザイン

プリミティブオブジェクトのカプセルの作り方

エディターデザイン

コード

using UnityEngine;

public class TranslateSample : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKey(KeyCode.Alpha1))
        {
            transform.Translate(new Vector2(1, 0) * Time.deltaTime, Space.Self);
        }
        else if (Input.GetKey(KeyCode.Alpha2))
        {
            transform.Translate(new Vector2(1, 0) * Time.deltaTime, Space.World);
        }
    }
}

このUnityのスクリプトは、TranslateSampleという名前のコンポーネントを持つGameObjectに対して、キーボードの1キーまたは2キーが押されている間、オブジェクトを右に移動させる機能を提供します。具体的な動作は以下の通りです。

  • Updateメソッド: このメソッドは毎フレーム呼び出されます。Unityのゲームループにおいて、オブジェクトの状態更新や入力のチェックなど、フレームごとの処理を行う場所です。
  • Input.GetKey(KeyCode.Alpha1): KeyCode.Alpha1はキーボードの1キーを指します。Input.GetKeyメソッドは、指定されたキーが押されている間、trueを返します。つまり、この条件がtrueの場合、1キーが押されている間に何かの処理を実行するということです。
  • transform.Translate(new Vector2(1, 0) * Time.deltaTime, Space.Self): この命令は、GameObjectをローカル空間(自身の軸に沿って)において右に移動させます。new Vector2(1, 0)はx軸に沿っての移動量を示し、Time.deltaTimeは前フレームからの経過時間で、この乗算によってフレームレートに依存しない移動量を保証します。Space.Selfは移動の基準となる空間をGameObject自身の空間としています。
  • Input.GetKey(KeyCode.Alpha2): これはキーボードの2キーに対するチェックを行います。
  • transform.Translate(new Vector2(1, 0) * Time.deltaTime, Space.World): この命令は、GameObjectをワールド空間(全体のシーンにおける共通の空間)において右に移動させます。ここでもnew Vector2(1, 0) * Time.deltaTimeで移動量を指定しており、Space.Worldによって移動の基準がワールド空間に設定されています。

要するに、このスクリプトは1キーを押している間、オブジェクトをそのローカル空間で右に移動させ、2キーを押している間、オブジェクトをワールド空間で右に移動させます。これにより、オブジェクトの向きに依存するか、シーン全体の向きに依存するかの違いを観察できるようになっています。

実行結果

1キーを押した時(ローカル座標系を基準に移動)

2キーを押した時(ワールド座標系を基準に移動)

Unity

Posted by hidepon