【Unity】正規化の基礎

この技術資料では、UnityのVector構造体で提供されている正規化操作を理解し、ゲーム開発での正しい使い方を学習することを目的としています。正規化とは、ベクトルの方向を保持しつつ、その大きさを1にする操作のことです。この操作は、移動や方向計算、速度の調整など、ゲームのあらゆる部分で活用できます。

正規化の概要

正規化とは、あるベクトルの長さ(大きさ)を1に調整することを意味します。ベクトルの方向は変わらず、単位ベクトル(長さが1のベクトル)となります。

例えば、2Dベクトル (3, 4) の長さは次のように計算されます。

これを正規化すると、長さが1のベクトルになります。

正規化のメリット

  • 移動速度の一定化: 正規化されたベクトルを使用すると、ベクトルの大きさに依存しない一定の移動速度が得られます。
  • 方向の保持: 方向だけを必要とする場合、正規化することで単純化できます。

Unityでの正規化の使い方

Unityでは、Vector2Vector3などのベクトルを簡単に正規化できます。Vector2.normalizedプロパティを使用すると、そのベクトルを正規化できます。

サンプルコード

以下に、Unityでの正規化の具体的な使用例を示します。このコードでは、2Dベクトルを正規化し、その結果を用いてオブジェクトを移動させます。

using UnityEngine;

public class NormalizationSample : MonoBehaviour
{
    // 2Dベクトルの定義
    public Vector2 originalVector = new Vector2(3, 4);  // 任意のベクトル
    public Vector2 normalizedVector;  // 正規化されたベクトル

    void Start()
    {
        // ベクトルの長さ(Magnitude)
        float magnitude = originalVector.magnitude;

        // ベクトルの正規化
        normalizedVector = originalVector.normalized;

        // 結果をコンソールに表示
        Debug.Log("Original Vector: " + originalVector);
        Debug.Log("Magnitude of Original Vector: " + magnitude);
        Debug.Log("Normalized Vector: " + normalizedVector);
    }

    void Update()
    {
        // キーを押すと正規化されたベクトルに基づいてオブジェクトを移動
        if (Input.GetKey(KeyCode.W))
        {
            transform.Translate(normalizedVector * Time.deltaTime * 5); // 正規化されたベクトルで移動
        }
    }
}

解説

  1. originalVector: 任意の2Dベクトルを定義しています。ここでは (3, 4) というベクトルを使用しています。
  2. magnitude: originalVector の長さ(大きさ)を計算します。この場合、長さは5です。
  3. normalizedVector: originalVector を正規化して、長さ1のベクトルを得ます。normalizedプロパティを使って簡単に正規化ができます。
  4. Updateメソッド: Wキーを押すと、正規化されたベクトルの方向にオブジェクトが移動します。Time.deltaTime を使って、フレームレートに依存しない移動が行われます。

実行手順

  1. Unityで新しいプロジェクトを作成します。
  2. 2Dオブジェクト(例:Sphere)をシーンに配置します。
  3. 上記のスクリプトを作成し、配置したオブジェクトにアタッチします。
  4. PlayモードでWキーを押すと、オブジェクトが正規化されたベクトルの方向に移動します。

まとめ

この技術資料では、Unityにおけるベクトルの正規化を理解し、その基本的な使い方を学びました。正規化は、ベクトルの大きさを1にする操作で、ゲーム内での方向計算や移動速度の一定化に役立ちます。実際のプロジェクトでも、ベクトルの計算を扱う際に正規化を活用することがよくあります。ぜひこの知識を活用し、より高度なベクトル操作に挑戦してみてください。

Unity

Posted by hidepon