21.

UE5のSet World Rotationの使い方|ワールド回転とRelative・Actorとの違い

編集

Set World Rotationは、コンポーネントやアクターの回転をワールド座標を基準として設定するノードです。親や取り付け先(アタッチ先)の向きに左右されず、シーン全体の絶対的な座標系で「どの方向を向くか」を指定できます。回転を相対値ではなく最終的なワールドの姿勢として与えたい場面で使われます。

この記事の要点
  • Set World Rotationはコンポーネント/アクターの回転をワールド座標基準で設定するノード。
  • 主な引数はNew Rotation(Rotator型:Pitch / Yaw / Roll)、Sweep(移動経路の衝突判定)、Teleport(物理状態の扱い)。
  • ワールド回転は親の影響を受けない絶対値、相対(Relative)回転は親に対する差分という違いがある。
  • 用途に応じてSet Relative RotationSet Actor RotationAdd(相対加算系)と使い分ける。
  • Rotatorは度(degree)指定。World と Relative の混同や親の存在が、想定外の向きになる主因になりやすい。

Set World Rotationとは

Unreal Engine 5(UE5)のBlueprint(BP)には、オブジェクトの回転を制御するノードがいくつか用意されています。その中でSet World Rotationは、対象の回転をワールド空間(World Space)の座標系で直接設定するノードです。ワールド空間とはレベル(シーン)全体に共通する基準座標で、ここで指定した回転は親オブジェクトやアタッチ階層の向きに影響されない「絶対的な姿勢」として扱われます。

このノードは主にSceneComponent系(StaticMeshComponentやArrowComponentなど、Transformを持つコンポーネント)のターゲットに対して使われます。アクター自体の回転を扱いたい場合は、後述のSet Actor Rotationが対応するノードになります。いずれもC++のAPIに対応する関数があり、Set World RotationはUSceneComponent::SetWorldRotationに相当します。

引数(ピン)の意味

Set World Rotationノードには、主に次のピンがあります。実際に表示される引数はバージョンや対象により多少異なる場合があるため、エディタ上の表記もあわせて確認してください。

ピン役割
TargetScene Component 参照回転を適用する対象のコンポーネント。
New RotationRotator(Pitch / Yaw / Roll)設定したいワールド回転。各成分は度(degree)で指定する。
SweepBoolean目的の姿勢へ移る経路で衝突判定(スイープ)を行うか。主にルートコンポーネントが対象で、衝突が無効な場合は効果がない。
TeleportETeleportType(列挙)物理状態をテレポート扱いにするか。テレポートにすると速度を保持し、しない場合は位置変化に応じて物理速度が更新される。
Sweep Hit ResultHit Result(出力)Sweepを有効にしたとき、経路上で何かに当たった際のヒット情報を返す。

New RotationはRotator型で、Pitch(X軸まわり=上下の見上げ/見下ろし)Yaw(Z軸まわり=左右の向き)Roll(Y軸まわり=傾き)の3成分を持ちます。値はラジアンではなくで扱う点に注意してください。

SweepTeleportは、回転に伴って対象の位置や物理が動くケース(オフセットを持つルートコンポーネントなど)で意味を持ちます。純粋にその場で向きだけを変える用途では、これらの影響は小さいことが多いものの、コリジョンや物理シミュレーションを併用している場合は挙動が変わるため、目的に合わせて設定します。

ワールド回転とローカル(相対)回転の違い

UE5の回転設定は、大きくワールド(World)基準相対(Relative=ローカル)基準の2系統に分かれます。この違いを理解することが、Set World Rotationを正しく使う前提になります。

  • ワールド回転:レベル全体の共通座標系における絶対的な向き。親がどう回転していても、指定した向きがそのまま最終的な姿勢になる。
  • 相対(ローカル)回転:親(アタッチ先のコンポーネントやアクター)の座標系を基準にした差分。親が回転すれば、子の最終的なワールド姿勢も連動して変わる。

例えば、回転している土台(親)の上に乗った砲塔(子)を考えます。砲塔の相対回転を0のままにしておくと、砲塔は土台と一緒に回り続けます。これに対し、砲塔へSet World Rotationで特定のワールド方向を与えると、土台の回転に関係なく常にその方向を向かせることができます。内部的には、指定したワールド回転を実現するために相対回転が再計算されて適用されます。

Set Relative / Set Actor / Add 系との違い

回転を設定・加算するノードは複数あり、目的によって使い分けます。代表的なものを比較します。

ノード対象基準動作主な用途
Set World Rotationコンポーネントワールド(絶対)指定した向きをそのまま最終姿勢にする親に左右されず特定方向を向かせたい
Set Relative Rotationコンポーネント親基準(相対)親に対する差分として向きを設定アタッチ階層内での向き調整
Set Actor Rotationアクターワールド(絶対)アクターのルートをワールド基準で回転アクター全体の向きを設定
Add World / Relative Rotationコンポーネント現在値への加算現在の回転に増分を足す毎フレーム少しずつ回す等の継続回転

大まかな指針は次の通りです。「絶対的な向きを一度で決めたい」ならSet World Rotation(アクター単位ならSet Actor Rotation)「親の中での相対的な向きを決めたい」ならSet Relative Rotation「現在の向きに少しずつ足していきたい」ならAdd系です。コンポーネントとアクターのどちらを対象にするかで、World系とActor系を選ぶ点もポイントになります。

使い方の例:対象の方を向かせる

ワールド回転がとくに活きるのが、「あるオブジェクトを別のオブジェクトの方向へ向かせる」処理です。向きはワールド空間で計算されるため、Set World Rotationと相性が良い組み合わせです。

典型的な流れは次のようになります。

1. 自分の位置(Get World Location)と、向きたい相手の位置(ターゲットのGet World Location)を取得する。
2. Find Look at Rotationノードに、Start=自分の位置、Target=相手の位置を渡し、相手を向くRotatorを得る。
3. 得られたRotatorをSet World RotationのNew Rotationへ接続し、対象に適用する。

これにより、対象は常にターゲットの方向(ワールド基準)を向きます。向きを瞬時に切り替えるのではなく滑らかに追従させたい場合は、現在の回転と目標の回転をRInterp Toなどで補間し、その結果をSet World Rotationへ渡すとよいでしょう。なお、Find Look at Rotationが返すのは主にPitchとYawの向きで、必要に応じてYawのみを使うなど成分を取捨選択すると、意図しない傾き(Roll)を避けやすくなります。

Get World Location (Self) ─┐
                  ├─▶ Find Look at Rotation ─▶ Set World Rotation (New Rotation)
Get World Location (Target) ┘

落とし穴と注意点

よくある落とし穴内容と対策
World と Relative の混同相対回転を設定したいのにWorldを使う(またはその逆)と、親が回転している場合に向きがずれる。親の影響を受けたいかどうかで選ぶ。
親(アタッチ階層)の影響を見落とす対象が他のコンポーネントへアタッチされていると、見た目の挙動が直感とずれることがある。階層構造を確認する。
Rotatorの単位の取り違えRotatorの各成分は度。ラジアンの値をそのまま入れると大きくずれる。回転計算の結果を渡すときは単位に注意。
瞬間的に切り替わる直接適用すると向きが一瞬で変わる。滑らかにしたい場合はRInterp Toなどで補間してから渡す。
物理シミュレーション中の対象物理が有効なコンポーネントに直接適用すると、SweepやTeleportの設定により挙動が変わる。物理を併用する場合は両引数の意味を確認する。

FAQ

Q. Set World RotationとSet Actor Rotationはどちらを使えばよいですか。
A. 回転させたい対象がアクター全体(ルート)ならSet Actor Rotation、アクター内の特定のコンポーネントならSet World Rotationが基本です。どちらもワールド基準の絶対回転を扱う点は共通しています。対象として何を選んでいるか(ピンに何を接続しているか)で判断してください。

Q. 向きが思った方向にならず、少しずれます。原因は何が考えられますか。
A. まず対象が他のコンポーネントへアタッチされていないか(親の影響を受けていないか)を確認します。次に、Worldを使うべき場面でRelativeを使っていないか、Rotatorの成分(Pitch / Yaw / Roll)の割り当てや単位(度)が正しいかを見直します。Find Look at Rotationと併用している場合は、不要なRollやPitchが入っていないかも確認するとよいでしょう。

Q. 滑らかに回転させたいのですが、Set World Rotation単体では瞬時に切り替わってしまいます。
A. このノードは指定した姿勢を一度で適用するため、それ自体には補間機能がありません。Tickなど継続的に実行されるイベントの中で、現在の回転から目標の回転へRInterp Toなどで毎フレーム少しずつ近づけ、その結果をSet World Rotationへ渡すことで滑らかな回転を表現できます。

まとめ

Set World Rotationは、コンポーネントやアクターの回転をワールド座標基準の絶対値として設定するノードです。親やアタッチ階層の影響を受けないため、「常に特定の方向を向かせたい」「向きを一度で確定させたい」といった用途に向いています。親基準で扱うSet Relative Rotation、アクター単位のSet Actor Rotation、現在値に足し込むAdd系との違いを押さえ、Find Look at RotationやRInterp Toと組み合わせることで、狙った向きへ正確かつ滑らかに制御できるようになります。WorldとRelativeの取り違えや親の影響、Rotatorの単位といった落とし穴に注意して、目的に合ったノードを選びましょう。

編集
Post Share
子ページ
  1. RInterp To
同階層のページ
  1. Event BeginPlay
  2. Event ActorBeginOverlap
  3. Event Tick
  4. on component begin overlap
  5. On Component Hit
  6. CameraBoom(Spring Arm)
  7. Get Player Character
  8. Nav Mesh Bounds Volume
  9. AI MoveTo
  10. Pawn
  11. Create Render Target 2D
  12. Take High Res Screenshotノード
  13. Sphere Reflection Capture
  14. Event Tickノード
  15. ウィジェットのキャンバスパネル
  16. DefaultSceneRoot
  17. FloatingPawnMovement
  18. Set World Rotation
  19. Event Any Damage
  20. Set World Rotation
  21. VInterp To
  22. Get Socket Transform

最近更新/作成されたページ