18.

UE5 Set World Rotationの使い方|Set Relative Rotationとの違い

編集
この記事の要点
  • Set World Rotation はアクター・コンポーネントのワールド空間での回転を直接書き換える関数
  • Set Relative Rotation はローカル(親基準)回転を書き換える。アタッチされている場合は使い分けが重要
  • 入力は Rotator(Pitch / Yaw / Roll)型。Make Rotator ノードで組み立てる
  • Sweep オプションで衝突を考慮、Teleport で物理計算をスキップできる
  • Simulate Physics が有効な剛体は物理エンジン制御下。直接 Set World Rotation は効きにくく、Set Physics Rotation が必要

Set World Rotation とは

Set World Rotation は Unreal Engine 5 のブループリント / C++ で使える関数で、アクターまたはシーンコンポーネントの回転をワールド座標基準で設定します。「絶対回転を直接書き換える」イメージです。

同様の関数群:

関数基準主な用途
Set World Rotationワールド空間絶対方向を指定
Set Relative Rotation親(ローカル)空間親に追従させつつ相対角度を変える
Set Actor Rotationルートコンポーネントの Worldアクター全体の向き
Add World Rotationワールド空間に加算「現在の向きから +30 度回す」
Set Physics Rotation物理エンジン経由Simulate Physics 中の剛体

入力ピン

ピン意味
TargetSceneComponent / Actor回転させる対象
New RotationRotator新しいワールド回転値(Pitch, Yaw, Roll)
Sweepbooltrue で経路上の衝突を判定(CCD 的挙動)
Teleportbool / enumtrue で物理状態をリセットして瞬間移動扱い
Hit ResultHitResult(出力)Sweep 時の衝突情報

基本的な使い方(Blueprint)

  1. イベントグラフで Tick / カスタムイベントから処理開始
  2. Make Rotator ノードで Rotator を組み立てる(Pitch / Yaw / Roll を指定)
  3. Set World Rotation ノードを配置し、Target と New Rotation を接続
  4. 必要に応じて Sweep / Teleport を設定

例: アクターを Z 軸まわりに 90 度向ける

  • Make Rotator: Pitch=0, Yaw=90, Roll=0
  • Set World Rotation: New Rotation に上記をつなぐ

C++ での書き方

// Actor のルートコンポーネントを回す
SetActorRotation(FRotator(0.0f, 90.0f, 0.0f));

// 任意のシーンコンポーネント
MyComp->SetWorldRotation(FRotator(0.0f, YawDeg, 0.0f));

// Sweep + 衝突結果を取る
FHitResult Hit;
MyComp->SetWorldRotation(NewRot, /*bSweep=*/true, &Hit, ETeleportType::None);

// 物理シミュレーション中の剛体(推奨)
MyPrim->SetPhysicsRotation(FQuat(NewRot));

Set World Rotation と Set Relative Rotation の違い

アクター B が アクター A に Attach されている状況を考えます。A をワールド Z 軸 +30 度回転させた状態で、B の向きをどう扱うかで使い分けます。

使用関数挙動
B.SetWorldRotation(0,90,0)B のワールド向きを Yaw=90 にそのまま設定(A の回転を打ち消す)
B.SetRelativeRotation(0,90,0)B は A に対して Yaw=90 ずれた向き(A も回るなら一緒に回る)

「親の動きに追従して、追加で 30 度ずらしたい」なら Relative、「絶対方向を毎フレーム狙いたい」なら World です。

Sweep / Teleport オプション

オプションtrue のとき
Sweep回転経路で衝突判定し、ぶつかった時点で止まる。Hit Result に詳細
Teleport物理速度・接触状態をリセットして瞬間移動扱い。テレポートや初期配置に使う

キャラクター移動などで小さな回転を多用する場合、Sweep を有効にすると壁めり込みを防げます。一方、ワープ系演出では Teleport を有効にして物理を引きずらないようにします。

動かない・思った向きにならない原因

1. Simulate Physics が有効

対象 PrimitiveComponent で Simulate Physics が ON だと、姿勢は物理エンジンが管理します。Set World Rotation を呼んでも次フレームで上書きされたり無視されたりします。物理剛体には Set Physics Rotation(C++)/ Set All Physics Rotation を使います。

2. アタッチ階層の影響

親アクター / 親コンポーネントが動いていると、World 指定でも次フレームで再計算され「ずれて見える」ことがあります。階層に依存させたいなら Relative、独立させたいならDetachしてから World で動かします。

3. オイラー角の特性(ジンバルロック)

Pitch が ±90° に近づくと、Yaw / Roll が同じ軸を回すようになり制御不能になる現象がジンバルロックです。長時間の補間や複合回転では Rotator ではなくQuaternion(FQuat)で計算し、最後に Rotator に変換する設計が安全です。

4. ターゲットを間違えている

Actor を回したいのに SkeletalMesh コンポーネントだけ回している、というケース。Set Actor Rotation(ルート全体)と各 Component の Set World Rotationを区別します。

補間して滑らかに回す

毎フレーム目標値をジャンプ設定するとカクつくため、RInterp ToQInterp To で補間します。

// Tick 内
FRotator Cur    = GetActorRotation();
FRotator Target = FRotator(0.f, 90.f, 0.f);
FRotator Next   = FMath::RInterpTo(Cur, Target, DeltaTime, /*Speed=*/4.f);
SetActorRotation(Next);

Blueprint なら RInterp To ノードを Tick で使い、Current / Target / Delta Time / Interp Speed を接続します。

FAQ

Q: アクターとシーンコンポーネント、どちらを回せばいい?
A: アクター全体を回すなら Set Actor Rotation。武器メッシュなど一部だけ回したいなら、そのコンポーネントに対して Set World/Relative Rotation を使います。

Q: 360 度を超える Yaw は?
A: 内部的に正規化されます(−180° 〜 +180°)。差分計算は NormalizeAxis で整理してから行うとバグが減ります。

Q: ネットワーク同期は?
A: Replicated なアクター / コンポーネントなら、サーバ側で Set World Rotation すれば自動的にクライアントへ複製されます。クライアント側のみの設定は表示限定です。

関連

  • Set Relative Rotation / Add World Rotation
  • Set Actor Rotation / Set Actor Transform
  • Make Rotator / Break Rotator / FRotator
  • FQuat(クォータニオン)
  • RInterp To — 補間ノード
  • Simulate Physics / Set Physics Rotation
編集
Post Share
子ページ

子ページはありません

同階層のページ
  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

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