Unity入門

【Unity】Vector3の座標・加算・正規化を徹底解説

この記事について

この記事ではVector3の基本的な使い方をまとめています。
Transformの 位置・回転・拡縮 のうち、座標や方向ベクトルを扱う場面で必ず登場するのが「Vector3」です。

この記事でわかること

  • transform.position で座標を取得・設定できる
  • + , – 演算でベクトルの加算・減算が可能
  • normalized で正規化して方向ベクトルを求められる
  • magnitude でベクトルの長さを取得できる
  • Vector3.forward や Vector3.up などの定義済み方向を使える

Transformとは?

Transformについては以下の記事を参考にしてください。

Vector3とは?

Vector3 は X, Y, Z の3つの値をまとめて管理する構造体 です。
座標(位置)や移動方向、力のベクトルなどに広く使われます。

Vector3 v = new Vector3(1, 2, 3); // X=1, Y=2, Z=3 のベクトル

Vector3をスクリプトで制御

ベクトル(方向)の加算・減算

ベクトルは「+」や「」演算で計算できます。

参考サイトは以下の記事です。

ベクトルの正規化(normalized)

正規化するとベクトルの長さを1に揃えて「方向」だけを扱えます。

using UnityEngine;

public class Vector3_Normalize : MonoBehaviour
{
    void Update()
    {
        // ターゲット方向に進む
        Vector3 target = new Vector3(5, 0, 5);
        Vector3 dir = (target - transform.position).normalized;

        transform.position += dir * 3f * Time.deltaTime;
    }
}

ベクトルの長さ(magnitude / sqrMagnitude)

ベクトルの「距離」や「速さ」を求めたいときに使います。
※ベクトルの距離がわからない方は「三平方の定理」について調べてみるといいかもしれないです。

using UnityEngine;

public class Transform_position : MonoBehaviour
{
    void Start()
    {
        Vector3 v = new Vector3(3, 4, 0);
        Debug.Log("長さ: " + v.magnitude);      // √(x^2+y^2+z^2)
        Debug.Log("長さ²: " + v.sqrMagnitude);  // (x^2+y^2+z^2)   (高速計算用)
    }
}

距離の比較(Vector3.Distance)

Vector3.Distance」を使えば2点間の距離がすぐに求められます。
※「magnitude」と同じなのでコードのみ載せておきます。

using UnityEngine;

public class Transform_position: MonoBehaviour
{
    [SerializeField] private Transform target;

    void Update()
    {
        float dist = Vector3.Distance(transform.position, target.position);
        Debug.Log("距離: " + dist);
    }
}

よく使う定義済み方向

Unityではよく使う方向が Vector3 として定義されています。
これらを使うと座標指定がシンプルになります。

  • Vector3.forward // (0, 0, 1)
  • Vector3.back // (0, 0, -1)
  • Vector3.up // (0, 1, 0)
  • Vector3.down // (0, -1, 0)
  • Vector3.right // (1, 0, 0)
  • Vector3.left // (-1, 0, 0)
  • Vector3.zero // (0, 0, 0)
  • Vector3.one // (1, 1, 1)

まとめ

  • transform.position → オブジェクトの座標
  • +/- → ベクトルの加算・減算
  • normalized → 正規化して方向を求める
  • magnitude / sqrMagnitude → 長さの計算
  • Vector3.forward / Vector3.up など → 定義済み方向が便利