【Unreal Engine】UE5の回転と補間の基礎:Rotator・Interp To・Lerpの使い分け

作成: 2026-07-25

敵がプレイヤーを向くとき、なぜか一瞬で振り向く。砲塔が逆回りする。UE5のRotatorとQuaternionの違い、350度から10度へ回すと逆回りする理由、RInterp ToとLerpの使い分けを図解し、砲塔がなめらかに旋回して狙う実践まで解説します。

敵がプレイヤーの方を向く処理を書いたら、一瞬でカクッと振り向いた。砲塔をなめらかに回そうとしたら、狙いたい方向と逆にぐるっと回った。Lerp を使ってみたけれど、何も動かない。

回転は、UEで最初につまずきやすい場所です。原因は難しい数学ではなく、「角度は一周する」という当たり前の性質と、似たノードが別の目的を持っていることにあります。この記事では、Rotatorの正体、逆回りが起きる理由、Interp ToLerp の使い分けを解説し、最後に砲塔がなめらかに旋回して狙うところまで作ります。

砲塔が目標の方向へなめらかに旋回していく様子とソフトブルーのクレイ人形

この記事でわかること

  • Rotator は3つの角度、 Quaternion は向きそのもの
  • 350度から10度へ回すと 逆回りする 理由
  • 向きを作る道具(Find Look at Rotation / Make Rotator
  • RInterp To / VInterp To / FInterp To の使い方と Interp Speed
  • LerpInterp To は別物 (混ぜる/近づける)
  • 実践: 砲塔がなめらかに旋回して狙う

Sponsored

Rotatorは3つの角度、Quaternionは向きそのもの

UEで回転を扱うとき、表に出てくるのはほぼ Rotator です。詳細パネルの Rotation も、Blueprintの回転ピンも、中身はRotatorです。

Rotatorは、3つの角度をまとめたものです。

成分動きのイメージ
RollX軸まわり飛行機が横に傾く
PitchY軸まわり上を向く・下を向く
YawZ軸まわり左右を振り向く
RollとPitchとYawが、それぞれどの軸まわりの回転かを1体の人形で示した図

キャラクターが左右を向くのは Yaw 、上下に狙いをつけるのが Pitch です。この2つを覚えておけば、当面は困りません。

一方の Quaternion(クォータニオン) は、UEの内部で回転を保持している形式です。Rotatorが「3つの角度」なのに対し、Quaternionは 向きそのものを1つの塊として持ちます

Blueprintで普通に作るぶんには、Quaternionを直接触る必要はほとんどありません。 Rotatorと、この記事で扱う補間ノードで足ります。意識するのは、自前で回転を合成したいときや、補間が明らかに暴れたときだけです。

なぜ2つあるのか。 Rotatorは人間が読み書きしやすい代わりに、 補間や合成が苦手 です。Quaternionはその逆で、読んでも意味が分かりませんが、補間や合成が正確にできます。UEは「見せるのはRotator、計算するのはQuaternion」と役割を分けています。


角度は一周する、という事故

回転で最初に踏むのが、逆回りです。

砲塔が今 350度 を向いていて、目標が 10度 だとします。人間の目には「あと20度、右へ回すだけ」に見えます。ところが数値としては、350と10は 340も離れています

Rotatorの数値をそのまま混ぜると、近いほうの20度ではなく、遠いほうの340度をぐるっと回ります

350度から10度へ回すとき、正しい20度の近回りと、数値をそのまま混ぜたときの340度の逆回りを対比した図

これが「狙いたい方向と逆にぐるっと回った」の正体です。バグではなく、角度が360で一周するのに数値は一周しないという、当たり前の性質から来ています。

対策は簡単で、回転専用の補間ノードを使うことです。RInterp To は内部で近いほうを選ぶので、この事故は起きません。自分で角度を引き算して混ぜようとしたときだけ、逆回りが出ます。

Sponsored

向きを作る3つの道具

補間の前に、目標の向きを作る必要があります。よく使うのは3つです。

ノード何をするか使う場面
Find Look at RotationAからBを見る向き を返す敵がプレイヤーを向く、砲塔が狙う
Make RotatorRoll / Pitch / Yaw の数値から作る「真上を向く」など決め打ちの向き
Get Actor Rotation今の自分の向きを取る補間の開始点として

このうち圧倒的に出番が多いのが Find Look at Rotation です。Start に自分の位置、Target に相手の位置を入れると、その相手を向くRotator が返ってきます。角度の計算を自分でする必要はありません。

Find Look at RotationのStartに砲塔の位置、Targetに敵の位置を入れると、敵を向くRotatorが返ることを示した図

位置は Get Actor Location で取れます。「自分の位置」と「相手の位置」の2つが分かれば、向きは作れると覚えてください。

上下に傾いてほしくないとき。 Find Look at Rotation は相手が上や下にいると Pitch も傾きます。砲塔の土台のように 水平にだけ回したい なら、返ってきたRotatorを Break Rotator で分解し、Yaw だけを使って Make Rotator(Roll=0, Pitch=0)で組み直します。


なめらかにするInterp Toノード

目標の向きが分かっても、そのまま Set Actor Rotation に入れると 一瞬でカクッと切り替わります 。なめらかにするのが Interp To 系のノードです。

ノード対象使う場面
RInterp To回転(Rotator)敵が振り向く、砲塔が旋回する
VInterp To位置(Vector)カメラが追いかける、UIが寄っていく
FInterp To数値(Float)体力バーが減る、視野角が変わる

ピンは3種類とも同じ考え方です。

ピン入れるもの
Current今の値Get Actor Rotation など)
Target目標の値Find Look at Rotation の結果など)
Delta TimeEvent TickDelta Seconds
Interp Speed近づく速さ。 大きいほど速い

Delta Time を必ず繋いでください。 ここを繋がないと、PCの性能によって回る速さが変わります。Event TickDelta Seconds をそのまま入れるのが基本形です。

そして Interp To の性質として押さえておきたいのが、目標に近づくほど遅くなることです。等速では動きません。

Interp Toは目標に近いほど1フレームの移動量が小さくなり、自然に減速して止まることを示した図

この「勝手に減速する」性質のおかげで、Interp Speed を1つ決めるだけで、ぬるっとした自然な動きになります。目安は次のとおりです。

  • 2.0前後: ゆっくり。重い砲塔、大型ボスの旋回
  • 5.0前後: 標準。人型の敵が振り向く
  • 10.0以上: きびきび。プレイヤーの照準、カメラの追従
Sponsored

LerpとInterp Toは別物

Lerp を使ってみたのに何も動かなかった、というのがもう1つの定番のつまずきです。原因は、LerpInterp To別の目的のノード だからです。

LerpInterp To
することAとBを Alphaの割合で混ぜる現在値から目標へ 少しずつ近づける
Alpha / 進行自分で0→1へ動かすノードが勝手に進める
置く場所TimelineのカーブからEvent Tick
向いている決まった時間 で動かす追いかける 動き
Lerpは0から1のAlphaを自分で動かして混ぜるノード、Interp Toは現在値から目標へ毎フレーム近づけるノード、という違いを左右で対比した図

LerpAlpha に定数の 0.5 を入れたまま置いても、毎フレーム同じ「AとBのちょうど中間」が返るだけで、動いているようには見えません。これが「Lerpを使ったのに動かない」の中身です。

使い分けはこう考えてください。

  • 扉が2秒かけて開く のように、時間が決まっているなら → Timelineノード でAlphaを動かして Lerp
  • 敵がプレイヤーを追って向く のように、目標が動き続けるなら → Interp To

砲塔が動く相手を狙い続けるのは後者です。目標が毎フレーム変わるので、決まった時間で終わる動きにはできません。


実践:砲塔がなめらかに旋回して狙う

タワーディフェンスの防衛タレット、シューティングの自動迎撃砲、ステルスゲームの監視カメラ。「動く相手をゆっくり狙う」 はジャンル問わず出てくる定番です。ここでは砲塔を1つ作り、旋回の速さを変えて見比べます。

作るもの

BP_Turret というActorを作り、コンポーネントを2つ持たせます。

コンポーネント役割
Base(Static Mesh: Cylinder)土台。動かさない
Head(Static Mesh: Cube)砲身。 これを回す 。Baseの子にする

変数は1つだけです。

変数名既定値用途
TurnSpeedFloat2.0旋回の速さ(Interp Speed に入れる)

狙う相手はプレイヤーにします。レベルには BP_Turret を1つ置き、プレイヤーが周囲を歩ける状態にしておきます。

プレイヤーが砲塔の周りを歩くと、砲身が遅れて追いかけるように旋回し、止まると正確に向くまでの流れを示した実例図

つなぎ方

Event Tick に4ステップで組みます。

  1. Get Player Pawn でプレイヤーを取り、Get Actor Location で位置を得る
  2. Find Look at RotationStartHeadGet World LocationTarget にプレイヤーの位置を入れる
  3. 返ってきたRotatorを Break Rotator で分解し、Yaw だけを Make Rotator(Roll = 0.0, Pitch = 0.0)に入れ直す(土台が傾かないように水平だけ回す)
  4. RInterp ToCurrentHeadGet World RotationTarget に3の結果、Delta TimeDelta SecondsInterp SpeedTurnSpeed を入れ、結果を Set World Rotation(Target: Head)へ渡す
上段��「狙う向きを作る」でGet Player Pawn→Get Actor Location→Find Look at Rotation→Break Rotator、下段「なめらかに向ける」でMake Rotator→RInterp To→Set World Rotationへ折り返す2段組みの完成ノードグラフ

読み上げ用の疑似コードにすると、こうなります。

BP_Turret(イベントグラフ)
Event Tick(Delta Seconds)
  → player = GetPlayerPawn(0)
  → targetLoc = player.GetActorLocation()
  → look = FindLookAtRotation(Start = Head.GetWorldLocation(), Target = targetLoc)
  // 土台が傾かないよう、Yawだけ使う
  → yawOnly = MakeRotator(Roll = 0.0, Pitch = 0.0, Yaw = BreakRotator(look).Yaw)
  → newRot = RInterpTo(
        Current     = Head.GetWorldRotation(),
        Target      = yawOnly,
        DeltaTime   = Delta Seconds,
        InterpSpeed = TurnSpeed)
  → Head.SetWorldRotation(newRot)

確かめる

Playして、砲塔の周りを歩いてください。うまくいっていれば、砲身が少し遅れて付いてきて、こちらが止まると1秒ほどでぴたりと正面を向きます。走って砲塔の裏側へ回り込むと、砲身が追いつけずに遅れるのが見えます。

TurnSpeed2.0 から 10.0 に変えて、もう一度歩いてみてください。今度はほとんど遅れずに張り付いてきます。この1つの数字が、「重い砲台」と「機敏なレーダー」の差になります。

うまくいかないときの切り分けです。

  • 一瞬でカクッと向くRInterp To を通さず、Find Look at Rotation の結果を直接 Set World Rotation へ入れています
  • 少し動いてすぐ止まる/動く速さがPCによって違うDelta TimeDelta Seconds が繋がっていません
  • 砲身が斜めに傾くBreak Rotator / Make RotatorYaw だけにする手順が抜けています
  • 土台ごと回ってしまうSet World RotationTargetHead ではなくActor自身(self)になっています

ポイントは2つです。

  • 向きを作る担当と、なめらかにする担当を分ける: Find Look at Rotation が「どこを向くか」、RInterp To が「どれくらいの速さで向くか」。この2つを別のノードに任せておくと、速さだけ後から調整できます
  • Interp Speed はゲーム性そのもの: 遅ければ「裏を取れる重い砲台」、速ければ「逃げ切れないレーダー」。数値を1つ変えるだけで難易度が変わるので、Data Asset に出して敵ごとに持たせると調整しやすくなります

動く相手ではなく「決まった時間で開く扉」を作りたくなったら、Timelineノードで補間する が担当です。


おまけ:先に知っておくと良いこと

Setは置き換え、Addは足し算。 Set Actor Rotation今の向きを捨てて指定の向きにする ノード、Add Actor Local Rotation今の向きに足す ノードです。「毎フレーム1度ずつ回し続ける」ような処理はAdd、「この向きにする」はSetを使います。

WorldとRelativeの違い。 Set World Rotation はワールド基準、Set Relative Rotation親から見た向き です。砲塔の Head のように親(Base)を持つコンポーネントでは、親ごと回っている場合にRelativeを使うと自然になります。まずはWorldで組み、親が回るようになったらRelativeを検討してください。

ジンバルロックという言葉。 Rotatorで Pitch を真上(90度)付近まで持っていくと、RollYaw の効き方が重なって回転が不自然になることがあります。これがジンバルロックです。水平方向の旋回しかしないなら、まず出会いません。 空中戦の機体や自由に回るカメラを作る段になったら思い出せば十分です。

キャラクターの向きはComponentに任せられる。 プレイヤーや敵が移動方向を向く処理は、自分で書かなくても Character Movement ComponentOrient Rotation to MovementRotation Rate で作れます。この記事の内容は、移動と関係なく向きを制御したいとき(砲塔、監視カメラ、頭だけ向ける)に効いてきます。


まとめ

回転が思ったとおりに動かない原因は、たいてい次のどれかです。

  • 一瞬で切り替わる → 補間していない。RInterp To を挟む
  • 逆にぐるっと回る → 角度を自分で混ぜている。回転専用ノードに任せる
  • 速さがPCで変わるDelta Time を繋いでいない
  • Lerpが動かないAlpha を誰も動かしていない。時間で動かすならTimeline

覚えることは多くありません。向きは Find Look at Rotation で作り、RInterp To でなめらかにして、Setで反映する。 この3ノードの並びが、回転制御の基本形です。

Interp Speed を1つ変えるだけで、砲塔の性格は変わります。あなたのゲームの敵は、どれくらいの速さで振り向くのが気持ちいいでしょうか。