関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2015.04.24UE4UE/ Blueprint
執筆バージョン: Unreal Engine 4.7 改訂バージョン: Unreal Engine 4.24 |
こちらの記事には[UE5]改定版が存在します。 UE5向けの記事はこちら。 |
今回はBlueprint上で使えるRotator系のノード一覧と使い方をまとめてみました。
表の内容は全てバージョン4.24にて検証しています。
公式ドキュメント Unreal Engine 4 Documentation Rotator
ノード名 |
説明 |
Rotation作成ノード make
|
|
Make Rotator | ピッチ、ヨー、ロールからRotationを作る。 |
Find Look at Rotation | スタート位置からターゲット位置を向くRotationを作成する。 |
RotationFromXVector | X軸の方向ベクトルを元にRotationを作成する。 |
Make Rotation from Axes | 3軸指定してRotationを作る。 |
Rotator from Axis and Angle | ひとつの軸と角度を指定してRotationを作る。 |
Make Rot from X | X軸のみ与えられたRotationを作る。Y・Z軸は不特定だが、正規直交になる。X軸のNormalizeは必要ない。 |
Make Rot from XY | X軸とY軸からRotationを作る。X軸は固定されたままで、Y軸は直交性を矯正するために最小限修正される。Z軸は計算で求められる。入力は正規化をする必要がない。 |
Make Rot from XZ | X軸とZ軸からRotationを作る。X軸は固定されたままで、Z軸は直交性を矯正するために最小限修正される。Y軸は計算で求められる。入力は正規化をする必要がない。 |
Make Rot from Y | Y軸のみ与えられたRotationを作る。X・Z軸は不特定だが、正規直交になる。Y軸のNormalizeは必要ない。 |
Make Rot from YX | Y軸とx軸からRotationを作る。Y軸は固定されたままで、X軸は直交性を矯正するために最小限修正される。Z軸は計算で求められる。入力は正規化をする必要がない。 |
Make Rot from YZ | Y軸とZ軸からRotationを作る。Y軸は固定されたままで、z軸は直交性を矯正するために最小限修正される。X軸は計算で求められる。入力は正規化をする必要がない。 |
Make Rot from Z | Z軸のみ与えられたRotationを作る。X・Y軸は不特定だが、正規直交になる。Z軸のNormalizeは必要ない。 |
Make Rot from ZX | Z軸とX軸からRotationを作る。Z軸は固定されたままで、X軸は直交性を矯正するために最小限修正される。Y軸は計算で求められる。入力は正規化をする必要がない。 |
Make Rot from ZY | Z軸とY軸からRotationを作る。Z軸は固定されたままで、Y軸は直交性を矯正するために最小限修正される。X軸は計算で求められる。入力は正規化をする必要がない。 |
要素分解ノード break |
|
Break Rotator | Rotationをヨー・ピッチ・ロールに分解する。 |
Break Rot Into Axes | RotationをX・Y・Z軸に分解する。 |
値取得ノード get |
|
Get Axes | Rotationから3軸(X・Y・Z軸)を取得する。 |
GetRotationXVector | Rotation適用後のX方向ベクトルを取得する (≒Rotationをベクトルに変換する)。 |
演算ノード + – == != scale |
|
CombineRotators | 2つのRotationを組み合わせた結果を返す。 回転の合成・加算 |
Delta (Rotator) | 2つのRotationの差分を正規化して返す。 |
Scale Rotator | Bによってスケーリングされた角度Aを示すRotationを返す。 |
Equal (Rotator) | 2つのRotationが等しい場合trueを返す。 |
Not Equal (Rotator) | 2つのRotationが等しくない場合trueを返す。 |
InvertRotator | Rotationを反転させる。 |
補間ノード lerp interp |
|
Lerp (Rotator) | 線形補間。 |
Ease | 14種類の補間を選べる。 種類の詳細はEaseの記事にて紹介しています。 |
RInterp to | 徐々に向きを変える。 |
RInterp to Constant | 徐々に向きを変える。 小さい変化は無視される。(Quaternionに直した際のtickあたり1.e-4f未満の変化量は無視) |
処理ノード |
|
RotateVector | VectorをRotatorで回転する。 |
UnrotateVector | VectorをRotator分、逆に回転させる。 |
Rotate Vector Around Axis | Vectorを指定した軸周りに指定角度分回転させる。 Quaternionによる回転。 |
Select Rotator | bool値により2つの回転のうち一つを返す。 |
Actorのノード |
|
Get Actor Forward Vector | Actorの正面方向の単位ベクトル(X軸)を取得する。 |
Get Actor Right Vector | Actorの右方向の単位ベクトル(Y軸)を取得する。 |
Get Actor Up Vector | Actorの上方向の単位ベクトル(Z軸)を取得する。 |
Roll/Pitch/Yawを指定してRotatorを作る。 | RotatorをRoll/Pitch/Yawに分解する。
角度で指定・分解ができるので使いやすいのですが、現バージョンのUE4ではRotatorのPinにマウスカーソルを合わせ、Split Struct Pinをクリックするとこのノードを用いずともRoll/Pitch/Yawに分解できてしまうため、好みでご使用ください。
StartとTargetのワールド座標をVectorで入力すると、Rotationの値が(0,0,0)の時にX軸正方向を向くアクターが、Target方向を向くためのRotationが作られる。
Camera Actorを継承したブループリントを作り、以下のようなブループリントを書くとプレイヤーが動いても常にプレイヤーの方向を見続けるカメラが作れます。
X軸の方向ベクトルを元にRotationを作成する。ベクトルをRotationに変換するのに使える。
このノードで返ってくるRotationはYawとPitchのみで表現され、Rollの値は常に0になる。
黄色がIn Vecの方向ベクトル、赤色がX軸。
X軸がIn Vecの方向ベクトルと並行になるようにRotaitionを作成する。
3軸指定してRotationを作る。入力するVectorは中で正規化されるので事前の正規化は必要ない。
Roll/Pitch/Yaw全て計算される。
ひとつの軸と角度を指定してRotationを作る。軸は正規化する必要がなく、角度はデグリーで指定する。
内部では一度クオータニオンに変換し、それをさらにRotatorに変換して返している。
黄色がAxisの方向ベクトル。
Axisを軸にして、緑の矢印の向きにAngle度回転させる。
1軸もしくは2軸を指定してRotationを作るノード。指定しなかった軸は自動計算で求められる。
1軸指定の Make Rot from X は Rotation from XVector とほぼ同じRotationが求められる。
↓10万回ランダムに求めた同じベクトルからMake Rot from X / Rotation from XVector のそれぞれを用いてRotatorを作り、2つのRotatorがNotEqualだったらHelloという実験
10万回のうち10回前後がNotEqualなRotatorとなるのみなのでほぼ同じ結果といえる。
2軸指定の Make Rot from ノードは初めに2つの軸が垂直に交わっているか調べ、垂直でなければ1番目に指定した方の軸のみを使ってRotatorを生成する。
2つの軸が垂直であった場合は、2軸を使って残りの1軸を求めてからRotatorを生成する。
RotationをX・Y・Z軸の方向ベクトルに分解する。 Rotationから3軸(X・Y・Z軸)を取得する。
中で行われている計算は同じなのでお好みで好きな方を使いましょう。私は Get Axes が好きです。
Rotation適用後のX方向ベクトルを取得する。RotationをVectorに変換する意図で使って問題ありません。
内部でもConv_RotatorToVectorという名前の関数を使っています。
2つのRotationを組み合わせた結果を返す。Rotatorの合成や単純な加算にはこれを使う。
このノードを使わず回転する方法に↓のようなものが考えられますが、
この方法だとPitchを90°回したあたりで全く回転しなくなります。恐らくジンバルロックを防ぐためのUE4の仕様です。
90°を超えて回転させたい場合にはCombine Rotatorsを使います。
2つのRotationの差分を正規化して返す。
Rotatorの各成分Roll・Pitch・YawそれぞれにFloatの値をかける。
2つのRotationが等しい場合trueを返す。Roll・Pitch・Yawの成分全てがFloatで指定した誤差範囲より小さければtrueが返る。一つでも誤差範囲を超えていたらfalseが返る。
2つのRotationが等しい場合trueを返す。Roll・Pitch・Yawの成分それぞれを比較し、一つでも指定したFloat値の誤差範囲を超えていたらtrueが返る。全てが誤差範囲より小さければfalseが返る。
Rotationを反転させる。
内部では、Rotatorを一度クオータニオンに変換する。 → そのクオータニオンで軸を表すX,Y,Zの各値の符号を反転させて新たなクオータニオンにする。 → クオータニオンからRotatorに変換するという処理を行っている。
2つのRotatorを補間する。 Shortest Pathにチェックを入れると最短のルートで補間される。
Lerp(Rotator)はいわゆる線形補間で、Alphaの値によって補間される。EaseノードのFunctionからLinearを選んだ場合と挙動は同じ。
EaseノードはAかBのPinにRotatorをつなぐとRotator用の補間をするEaseとして働くようになる。Functionの種類によって14種類の保管方法がある。詳しくはEaseの記事にて。
徐々にターゲット方向を向くためのRotatorを計算してくれるノード。
Camera Actorを継承してブループリントを作り、EventGraphに以下のように書くと、プレイヤーをゆっくりと追い続けるカメラが作れる。
Constant の無い方は滑らかに Target に向かうような動き方をし、Constant の付いている方は、Roll・Pitch・Yaw の各値がそれぞれ同じだけ Target に近づくため、向きによっては機敏になったり鈍くなったりする。
使い分けが必要ですが、基本的には RInterp to の方が扱いやすいです。
VectorをRotatorで回転する。
VectorをRotator分、逆に回転させる。
Vectorを指定した軸周りに指定角度分回転させる。角度はデグリー角で指定する。いわゆるQuaternionによる回転。
bool値により2つの回転のうち一つを返す。三項演算子のような感じで、うまく使いこなせばブループリントが読みやすくコンパクトになるかもしれません。
Actorのローカルな軸方向ベクトルが取得できます。
Get Actor Forward Vector = X軸
Get Actor Right Vector = Y軸
Get Actor Up Vector = Z軸