タイトル: Set World Rotation
SEOタイトル: UE5 Set World Rotation 完全ガイド(ワールド回転 / Set Relative Rotation との違い / Sweep / Teleport / 物理 / 注意点)
| この記事の要点 |
|
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 中の剛体 |
入力ピン
| ピン | 型 | 意味 |
|---|---|---|
| Target | SceneComponent / Actor | 回転させる対象 |
| New Rotation | Rotator | 新しいワールド回転値(Pitch, Yaw, Roll) |
| Sweep | bool | true で経路上の衝突を判定(CCD 的挙動) |
| Teleport | bool / enum | true で物理状態をリセットして瞬間移動扱い |
| Hit Result | HitResult(出力) | Sweep 時の衝突情報 |
基本的な使い方(Blueprint)
- イベントグラフで Tick / カスタムイベントから処理開始
- Make Rotator ノードで Rotator を組み立てる(Pitch / Yaw / Roll を指定)
- Set World Rotation ノードを配置し、Target と New Rotation を接続
- 必要に応じて 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 To や QInterp 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