この記事について
この記事では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 など → 定義済み方向が便利