|
執筆バージョン: Unreal Engine 5.7
|
Blueprint上で使えるVector系のノードと使い方・注意点・サンプルなどをまとめます。項目が多い為、以下分類に従って記事を全3回に分割します。本稿は第1回にあたります。
第1回 : ベクトル基本編 (本稿)
- ベクトルの作成と分解(20項目)
- 長さと距離(13項目)
- 正規化とリサイズ(11項目)
- ベクトル演算と比較(19項目)
第2回 : ベクトル実践編 (※後日公開予定)
- 補間と加算(4項目)
- 投影と反射(8項目)
- 方向・回転・角度変換(17項目)
第3回 : ベクトル応用編 (※後日公開予定)
- 応用・その他(7項目)
公式ドキュメント Unreal Engine 5 Documentation Vector
a. ベクトルの作成と分解 ▲ 目次に戻る
ノード名
|
説明
|
基本の作成・分解ノード basic
|
| Make Vector |
X, Y, Zの値からベクトルを作成する。 |
| Break Vector |
ベクトルをX, Y, Zの個別の値に分解する。 |
設定・代入ノード set / assign
|
| Vector Set |
ベクトルのX, Y, Z値を直接設定する。 |
| Vector Assign |
ベクトルを既存の別のベクトル変数に代入する。 |
定数ベクトル constant
|
| Vector Zero |
ゼロベクトル (0.0, 0.0, 0.0) を返す。 |
| Vector One |
全成分が1のベクトル (1.0, 1.0, 1.0) を返す。 |
| Vector Forward |
Unrealの前方向ベクトル (1.0, 0.0, 0.0) を返す。 |
| Vector Backward |
Unrealの後方向ベクトル (-1.0, 0.0, 0.0) を返す。 |
| Vector Up |
Unrealの上方向ベクトル (0.0, 0.0, 1.0) を返す。 |
| Vector Down |
Unrealの下方向ベクトル (0.0, 0.0, -1.0) を返す。 |
| Vector Left |
Unrealの左方向ベクトル (0.0, -1.0, 0.0) を返す。 |
| Vector Right |
Unrealの右方向ベクトル (0.0, 1.0, 0.0) を返す。 |
ネットワーク用ノード network
|
| Make Vector Net Quantize |
ネットワーク用に帯域節約を目的とした、精度を落としたベクトルを作成する。 (整数単位) |
| Make Vector Net Quantize 10 |
ネットワーク用に精度を落としたベクトルを作成する。(0.1単位) |
| Make Vector Net Quantize 100 |
ネットワーク用に精度を落としたベクトルを作成する。(0.01単位) |
| Make Vector Net Quantize Normal |
ネットワーク用に精度を落とした、方向を示すベクトルを作成する(X, Y, Z各値が-1.0~1.0の値に収まる) |
| Break Vector Net Quantize |
量子化したベクトルをX, Y, Zに分解する。 |
| Break Vector Net Quantize 10 |
0.1単位量子化ベクトルを分解する。 |
| Break Vector Net Quantize 100 |
0.01単位量子化ベクトルを分解する。 |
| Break Vector Net Quantize Normal |
法線用量子化ベクトルを分解する。 |
・Make Vector / Break Vector ▲ 表に戻る
X, Y, Zの値からベクトルを作成する。 / ベクトルをX, Y, Zの個別の値に分解する。

Tips: VectorのPinにマウスカーソルを合わせ、Split Struct Pinをクリックするとこのノードを用いずともX/Y/Zに分解できます。

ベクトルのX, Y, Z値を直接設定する。

・Vector Assign ▲ 表に戻る
ベクトルを既存の別のベクトル変数に代入する。Aの値がBの値で書き換えられる。Bの値は不変。

用途: ベクトルのコピー。※ BPではSetノードで済むので、あまり使わないかも?
・Vector Zero / One / Forward / Backward / Up / Down / Left / Right ▲ 表に戻る
よく使う定数ベクトルを返すノード。出力値は表を参考のこと。

| ノード名 |
値 |
用途 |
| Vector Zero |
(0.0, 0.0, 0.0) |
初期化、リセット |
| Vector One |
(1.0, 1.0, 1.0) |
スケール初期値 |
| Vector Forward |
(1.0, 0.0, 0.0) |
前方向(X軸正) |
| Vector Backward |
(-1.0, 0.0, 0.0) |
後方向(X軸負) |
| Vector Up |
(0.0, 0.0, 1.0) |
上方向(Z軸正) |
| Vector Down |
(0.0, 0.0, -1.0) |
下方向(Z軸負) |
| Vector Left |
(0.0, -1.0, 0.0) |
左方向(Y軸負) |
| Vector Right |
(0.0, 1.0, 0.0) |
右方向(Y軸正) |
・Make Vector Net Quantize / Break Vector Net Quantize ▲ 表に戻る
ネットワーク用に帯域節約を目的とした、精度を落としたベクトルを作成する。※レプリケーション専用
送信側 / 受信側

出力結果

精度・ビット数・有効範囲一覧 (※表はNetSerialization.hの情報を基に作成)
| ノード名 |
精度 |
ビット数 |
有効範囲 |
| Net Quantize |
整数単位 |
最大20bit |
±1,048,576 |
| Net Quantize 10 |
0.1単位 |
最大24bit |
±1,677,721.6 |
| Net Quantize 100 |
0.01単位 |
最大30bit |
±10,737,418.24 |
| Net Quantize Normal |
約0.00003単位※1 |
16bit固定 |
-1〜+1 |
※1 : ソースコードに明確なコメントはなし。ビット数&有効範囲の情報からの計算値。
注意点:NetQuantizeNormalに入力したベクトルは自動で正規化処理されるわけではなく、単に各成分の値が-1.0~+1.0の範囲(精度16bit)で量子化される。
b. 長さと距離 ▲ 目次に戻る
・Vector Length ▲ 表に戻る
ベクトルの長さを返す。

用途: 速度(ベクトル)から速さを取得。移動距離の計算など。

・Vector Length Squared ▲ 表に戻る
ベクトルの長さの2乗を返す。

パフォーマンスTip: 距離の比較だけなら Squared 版を使う方が高速。(平方根の計算省略)
・Vector Length XY ▲ 表に戻る
XY平面でのベクトルの長さ(Z成分を無視)を返す。

用途: XY平面上でのアクターの速さを取得など。
・Vector Length XY Squared ▲ 表に戻る
XY平面でのベクトルの長さ(Z成分を無視)の2乗を返す。

パフォーマンスTip: 距離の比較だけなら Squared 版を使う方が高速。(平方根の計算省略)
・Distance (Vector) ▲ 表に戻る
2つのベクトルの2点間の距離を返す。

図のV1, V2先端を結ぶ線分の長さに相当する。
用途: アクター間の3D距離計算など。
・Distance Squared (Vector) ▲ 表に戻る
2つのベクトルの2点間の距離の2乗を返す。

パフォーマンスTip: 距離の比較だけなら Squared 版を使う方が高速。(平方根の計算省略)
・Distance2D (Vector) ▲ 表に戻る
2点間のワールドXY平面での2D距離(Z成分を無視)。

図のV1, V2のZ成分を無視したベクトルの先端を結ぶ線分(青)の長さに相当する。
・Distance2D Squared (Vector) ▲ 表に戻る
2つのベクトルの2点間のXY平面上での距離(Zを無視)の2乗を返す。

パフォーマンスTip: 距離の比較だけなら Squared 版を使う方が高速。(平方根の計算省略)
・Vector Is Zero ▲ 表に戻る

ベクトルの全成分が完全にゼロかどうかを判定する。
・Vector Is Nearly Zero ▲ 表に戻る
ベクトルが指定した許容誤差内でゼロに近いかを判定する。

注意: ベクトルの長さではなく各成分ごとに判定(|X|, |Y|, |Z| が全てTolerance以下ならtrue)
・Is Normal (Vector) ▲ 表に戻る

ベクトルが正規化(長さが1)されているかを判定する。許容誤差値は固定。
|1 – |A|²| < 固定許容誤差 [固定許容誤差 = #define UE_THRESH_VECTOR_NORMALIZED (0.01f)]
・Is Unit (Vector) ▲ 表に戻る

ベクトルが指定した許容誤差内で単位長かを判定する。
|1 – |A|²| < Squared Length Tolerance
・Is Uniform (Vector) ▲ 表に戻る

X, Y, Zがほぼ等しいかを判定する。
ベクトルA: |X – Y| ≤ Tolerance かつ |X – Z| ≤ Tolerance かつ |Y – Z| ≤ Tolerance
c. 正規化とリサイズ ▲ 目次に戻る

ベクトルを正規化したベクトルを返す。
注意: ベクトルAの長さの2乗値がToleranceより小さい場合はゼロベクトルを返す。
用途: あるアクターAから見たアクターBの3D方向を計算する時など

・Normalize 2D (Vector) ▲ 表に戻る
ベクトルをXY平面上で正規化。Zは0に設定される。

・Normalize In Place (Vector) ▲ 表に戻る
入力ベクトルを直接正規化する。


・Normal Unsafe (Vector) ▲ 表に戻る
ベクトルを正規化する。(ゼロ長判定なし、高速だが危険)

用途: パフォーマンス最適化。
注意: ゼロベクトルを渡すとクラッシュに繋がる可能性あり。(ゼロベクトルを渡すとNaNを返す)
・Clamp Vector Size ▲ 表に戻る
長さをMinとMaxの間にクランプしたベクトルを返す。

用途: 速度制限、移動量の制限など。

注意: 長さを持たないゼロベクトル(または極小)ではクランプ発生なし。ゼロベクトルが返される。
・Vector Clamp Size 2D ▲ 表に戻る
2D(XY平面)でベクトルの長さをMinとMaxの間にクランプしたベクトルを返す。Z値は変更されない。

用途: 水平方向の速度制限など。

注意: XY成分が長さを持たない(または極小)の場合ではベクトル2D(平面)クランプ発生なし。
・Vector Clamp Size Max ▲ 表に戻る

長さをMaxSize以下にクランプしたベクトルを返す。
用途: 最高速度の制限など。
・Vector Clamp Size Max 2D ▲ 表に戻る

2D(XY平面)でベクトルの長さをMaxSize以下に制限したベクトルを返す。Z値は変更されない。
用途: 水平方向の最高速度制限など。
・Vector Bounded to Box ▲ 表に戻る

ボックス(直方体)内にクランプされたベクトルを返す。
InBoxMin : ボックス左下手前座標を指定(図の緑色の球に相当)
InBoxMax : ボックス右上奥座標を指定(図の黄色の球に相当)
用途: 移動範囲をボックス(直方体)内に制限。

・Vector Bounded to Cube ▲ 表に戻る

キューブ(立方体)内にクランプされたベクトルを返す。
InRadius : 立方体原点を中心とした立方体の半辺長。各成分(X, Y, Z)が-Radius ~ +Radiusの範囲にクランプされる。
用途: 移動範囲を立方体内に制限

・Vector Snapped to Grid ▲ 表に戻る

グリッドにスナップされたベクトルを返す。
Grid Size: スナップ間隔。ベクトルの各成分が最も近いグリッドの倍数に丸められる。例えばGrid Size = 100の場合、50未満は0に、50以上150未満は100にスナップされる。

用途: グリッド上にアクターを配置する時など。
d. ベクトル演算と比較 ▲ 目次に戻る

2つのベクトルを加算する。
また、ベクトルとスカラー値(※内部でベクトル化したもの)を加算する。
用途: 位置の移動、力の合成、速度の加算など
・Subtract (減算) ▲ 表に戻る
2つのベクトルを減算する。
また、ベクトルとスカラー値(※内部でベクトル化したもの)を減算する。
※ 画像のよう、A + (-B) と考えると分かりやすいかもしれません。

用途: 2点間の方向ベクトル取得など(Target – Self で相手への方向)

2つのベクトルを成分ごとに乗算する。
また、ベクトルの各成分にスカラー値を掛ける。
用途: ベクトルの拡大・縮小、速度の調整など

2つのベクトルを成分ごとに除算する。
また、ベクトルの各成分をスカラー値で除算する。
用途: 各成分ごとに異なる除算を適用する場合など
注意: 成分が0のベクトルで除算するとNaNやInfになる。
・Dot Product ▲ 表に戻る

2つのベクトルの内積を計算。
用途例: 前後判定
XY平面上で、アクターAに対してアクターBが正面 / 背面にいるか判定。
- 結果が正: 同じ方向にいる(90度未満)
- 結果が負: 背後にいる(90度超)
- 結果が0: 丁度真横にいる(90度)※ サンプルでは正面に含める

用途: 角度判定、回転の向き判定など多岐にわたる。
・Cross Product ▲ 表に戻る

2つのベクトルの外積を計算。
用途例①: 左右判定
XY平面上で、アクターAに対してアクターBが左側 / 右側にいるか判定。
- AとBの外積の結果は両方に垂直な方向のベクトルとなり、その方向は左手の法則に従う(A→Bの回転方向に左手を巻くと、親指が結果の向きとなる)。
- 外積の結果とワールドのUpベクトル(0.0, 0.0, 1.0)を内積で比較すると、回転方向の判定が手軽に行える。

※ 画像(左)のAxBの結果はベクトルの大きさをクランプしています。

※ A と B が平行(θ=0° or 180°)の場合、結果はゼロベクトルになるので注意。
用途: 法線計算、左右判定、面の向き計算など多岐にわたる。
・Vector Component Min / Vector Component Max ▲ 表に戻る

2つのベクトルの各成分の最小値 / 最大値からなるベクトルを返す。
- Vector Component Min : A = (10, 5, 8)、B = (3, 9, 6) → 結果 = (3, 5, 6)
- Vector Component Max : A = (10, 5, 8)、B = (3, 9, 6) → 結果 = (10, 9, 8)
用途: バウンディングボックス(AABB)の計算など。
- バウンディングボックス:複数のオブジェクトをすっぽり囲む最小の箱。

※球のサイズまですっぽりBox内に入れる考慮はしていません。
・Get Min Element / Get Max Element ▲ 表に戻る

ベクトルの各成分の中で最小成分 / 最大成分の値を返す。
- Get Min Element : A = (10, 5, 8) → 結果 = 5
- Get Max Element : A = (10, 5, 8) → 結果 = 10
・Vector Get Abs ▲ 表に戻る

各成分の絶対値(マイナスをプラスに)を持つベクトルを返す。
- A = (-10, 5, -3) → (10, 5, 3)
・Vector Get Abs Min / Vector Get Abs Max ▲ 表に戻る

各成分の絶対値の中で最も小さい値 / 大きい値を返す。
- Vector Get Abs Min : A = (-10, 5, 3) → 3
- Vector Get Abs Max : A = (-10, 5, 3) → 10
・Negate Vector ▲ 表に戻る

ベクトルの符号を反転したコピーを返す。
- A = (10, 5, 3) → (-10, -5, -3)
用途: アクターの背後方向を取得など

・Reciprocal (Vector) ▲ 表に戻る

ゼロ除算を避けながらベクトルの逆数(1 ÷ 値)を返す。ゼロ成分はBIG_NUMBERに設定される。
- A = (2, 4, 5) → (0.5, 0.25, 0.2)
注意: 成分が 0 の場合はゼロ除算を避けるため、非常に大きな値(BIG_NUMBER)が入ります。
用途: スケールの反転など
・Vector Get Sign Vector ▲ 表に戻る

符号のみのベクトルのコピーを返す。各成分は+1、0、-1のいずれかに設定される。
- A = (-10, 5, -3) → (-1, 1, -1)
用途: 移動方向の符号取得など。
・Equal Exactly (Vector) ▲ 表に戻る

他のベクトルと等しいかを判定する。
注意: 浮動小数点の誤差があるため、計算結果の比較には向かない。「完全に同じ値を設定した場合」の比較に使う。

・Not Equal Exactly (Vector) ▲ 表に戻る

他のベクトルと等しくないかを判定する。
・Select Vector ▲ 表に戻る

条件に応じてAまたはBのベクトルを選択する。条件=TrueでAを返す。