コードの型
ベクトル(方向と大きさ)の長さを「1」にして、向きだけの状態にします。
C#
Vector3 direction = new Vector3(1, 1, 0); // 右上に進むベクトル
// 長さを1にする(向きは右上のまま)
Vector3 normalizedDirection = direction.normalized;
コードの仕組み
数学的には、元のベクトルの各成分を、そのベクトルの長さで割る処理をしています。
- なぜ使うの?:
- 斜め移動のバグを防ぐためです。
- キーボードで「右(1, 0)」と「上(0, 1)」を同時に押すと、斜めのベクトルは
(1, 1)になります。この長さは実は「約1.41」あります。 - そのまま移動に使うと、斜め移動だけ「1.4倍速く動く」という不公平な動きになってしまいます。
- 正規化の効果:
.normalizedを使うと、長さが強制的に「1」になるので、どの方向に進んでも移動速度が一定になります。
活用例(スムーズな斜め移動)
キャラクターの移動処理で、斜めに速くなるのを防ぐための定番パターンです。
C#
void Update()
{
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
// 入力方向のベクトルを作成
Vector3 moveDir = new Vector3(h, v, 0);
// 向きを正規化(長さ1)にしてから、スピードを掛ける
transform.Translate(moveDir.normalized * 5.0f * Time.deltaTime);
}
その他(重要ポイント)
- ゼロベクトルに注意: ベクトルが
(0, 0, 0)の時に.normalizedを使うとエラーにはなりませんが、計算結果も(0, 0, 0)になります。 - 元の変数は変わらない:
.normalizedを呼び出しても、元のベクトル自体の値は変わりません。「変換した結果を別の変数に入れる」か「そのまま掛け算に使う」のが基本です。 - Normalize(メソッド版)との違い:
.normalized: 変換後の新しい値を返す(元の変数はそのまま)。.Normalize(): その変数自身を直接書き換える。
初心者向けまとめ
.normalized は、「速さは無視して、どっちに進みたいかという『方向』だけ教えて!」という命令です。
- 車で言うなら「アクセル(大きさ)」を外して、「ハンドル(向き)」だけを抽出するようなイメージです。

コメント