【学習】Vector2 と Vector3(座標とベクトル)
Unity 入門シリーズでは、
- Vector2 で移動入力を受け取った
- Vector3 で位置を指定した
という形で座標やベクトルを使ってきました。
しかし、Vector2 と Vector3 には他にも便利なプロパティやメソッドがあります。
Vector2 と Vector3
の主な API をまとめて押さえましょう。
今回は Vector2 と Vector3 の演算、正規化、距離計算などを解説します。
今日学ぶこと
- 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);
}
}重要ポイント
Vector2 と Vector3 は座標・ベクトルを表す構造体です。
- 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 の座標・ベクトル計算の基本 です。移動や当たり判定で頻繁に使います。