学習記事一覧 · Unityクラス

【学習】Vector2 と Vector3(座標とベクトル)

Unity 入門シリーズでは、

  • Vector2 で移動入力を受け取った
  • Vector3 で位置を指定した

という形で座標やベクトルを使ってきました。

しかし、Vector2 と Vector3 には他にも便利なプロパティやメソッドがあります。

Vector2 と Vector3

の主な API をまとめて押さえましょう。

今回は Vector2Vector3 の演算、正規化、距離計算などを解説します。

今日学ぶこと

  • Vector2 / Vector3 … 2次元・3次元のベクトル
  • 演算 … 足し算、引き算、スカラー倍
  • normalized / magnitude … 正規化、長さ
  • Distance … 2点間の距離
  • Lerp … 線形補間

Vector2 と Vector3 とは

Vector2 は (x, y)、Vector3 は (x, y, z) の座標やベクトルを表す構造体です。Unity の位置、速度、方向など、多くの場面で使われます。

Vector2 v2 = new Vector2(1, 2);
Vector3 v3 = new Vector3(3, 2, 0);

// 2D では Z を 0 にして Vector3 を使うことも多い
Vector3 position = new Vector3(5, 2, 0);

よく使う定数

定数 説明
Vector2.zero (0, 0)
Vector2.one (1, 1)
Vector2.up (0, 1)(上方向)
Vector2.down (0, -1)(下方向)
Vector2.right (1, 0)(右方向)
Vector2.left (-1, 0)(左方向)

Vector3 にも同様に zero、one、up、down、right、left、forward、back があります。


演算(足し算・引き算・スカラー倍)

Vector2 a = new Vector2(1, 2);
Vector2 b = new Vector2(3, 1);

Vector2 sum = a + b;      // (4, 3)
Vector2 diff = a - b;     // (-2, 1)
Vector2 scaled = a * 2;   // (2, 4)

magnitude(長さ)

magnitude は、ベクトルの長さ(大きさ)です。

Vector2 v = new Vector2(3, 4);
float len = v.magnitude;  // 5(3-4-5 の直角三角形)

normalized(正規化)

normalized は、長さを 1 にしたベクトルです。方向だけが必要なときに使います。

Vector2 direction = (target - transform.position).normalized;
rb.velocity = direction * speed;

Distance(2点間の距離)

Vector2.Distance で、2点間の距離を取得できます。

float dist = Vector2.Distance(pointA, pointB);

// 3D の場合
float dist3 = Vector3.Distance(posA, posB);

Lerp(線形補間)

Lerp は、2つのベクトルを指定した割合で補間します。0 で始点、1 で終点、0.5 で中間です。

// 現在位置から目標位置へ、10% ずつ近づく
transform.position = Vector3.Lerp(transform.position, targetPosition, 0.1f);

// スムーズな追従
transform.position = Vector3.Lerp(transform.position, target.position, Time.deltaTime * 5f);

Dot(内積)

Dot は、2つのベクトルの内積です。同じ方向なら正、逆方向なら負になります。

float dot = Vector2.Dot(dirA, dirB);
// 1 に近い = 同じ方向
// -1 に近い = 逆方向
// 0 = 直角

完成コード例(方向に向かって移動)

using UnityEngine;

public class MoveToward : MonoBehaviour
{
    [SerializeField] private Transform target;
    [SerializeField] private float speed = 5f;

    void Update()
    {
        Vector2 direction = (target.position - transform.position).normalized;
        transform.position += (Vector3)(direction * speed * Time.deltaTime);
    }
}

重要ポイント

Vector2Vector3 は座標・ベクトルを表す構造体です。

  • Vector2.zero / one / up / right … よく使う定数
  • magnitude … ベクトルの長さ
  • normalized … 長さ 1 の方向ベクトル
  • Vector2.Distance … 2点間の距離
  • Lerp … 2点間を補間。スムーズな移動に使う
  • Dot … 内積。方向の一致を判定

発展アイデア

  • Vector2.Angle … 2つのベクトルの角度
  • Vector2.SignedAngle … 符号付きの角度
  • Quaternion … 3D の回転(Vector とは別)

Vector2 と Vector3 は Unity の座標・ベクトル計算の基本 です。移動や当たり判定で頻繁に使います。