敵がプレイヤーの方を向く処理を書いたら、一瞬でカクッと振り向いた。砲塔をなめらかに回そうとしたら、狙いたい方向と逆にぐるっと回った。Lerp を使ってみたけれど、何も動かない。
回転は、UEで最初につまずきやすい場所です。原因は難しい数学ではなく、「角度は一周する」という当たり前の性質と、似たノードが別の目的を持っていることにあります。この記事では、Rotatorの正体、逆回りが起きる理由、Interp To と Lerp の使い分けを解説し、最後に砲塔がなめらかに旋回して狙うところまで作ります。
この記事でわかること
- Rotator は3つの角度、 Quaternion は向きそのもの
- 350度から10度へ回すと 逆回りする 理由
- 向きを作る道具(
Find Look at Rotation/Make Rotator)RInterp To/VInterp To/FInterp Toの使い方とInterp SpeedLerpとInterp Toは別物 (混ぜる/近づける)- 実践: 砲塔がなめらかに旋回して狙う
Rotatorは3つの角度、Quaternionは向きそのもの
UEで回転を扱うとき、表に出てくるのはほぼ Rotator です。詳細パネルの Rotation も、Blueprintの回転ピンも、中身はRotatorです。
Rotatorは、3つの角度をまとめたものです。
| 成分 | 軸 | 動きのイメージ |
|---|---|---|
| Roll | X軸まわり | 飛行機が横に傾く |
| Pitch | Y軸まわり | 上を向く・下を向く |
| Yaw | Z軸まわり | 左右を振り向く |

キャラクターが左右を向くのは 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度をぐるっと回ります。

これが「狙いたい方向と逆にぐるっと回った」の正体です。バグではなく、角度が360で一周するのに数値は一周しないという、当たり前の性質から来ています。
対策は簡単で、回転専用の補間ノードを使うことです。RInterp To は内部で近いほうを選ぶので、この事故は起きません。自分で角度を引き算して混ぜようとしたときだけ、逆回りが出ます。
向きを作る3つの道具
補間の前に、目標の向きを作る必要があります。よく使うのは3つです。
| ノード | 何をするか | 使う場面 |
|---|---|---|
| Find Look at Rotation | AからBを見る向き を返す | 敵がプレイヤーを向く、砲塔が狙う |
| Make Rotator | Roll / Pitch / Yaw の数値から作る | 「真上を向く」など決め打ちの向き |
| Get Actor Rotation | 今の自分の向きを取る | 補間の開始点として |
このうち圧倒的に出番が多いのが 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 Time | Event Tick の Delta Seconds |
| Interp Speed | 近づく速さ。 大きいほど速い |
Delta Time を必ず繋いでください。 ここを繋がないと、PCの性能によって回る速さが変わります。Event Tick の Delta Seconds をそのまま入れるのが基本形です。
そして Interp To の性質として押さえておきたいのが、目標に近づくほど遅くなることです。等速では動きません。

この「勝手に減速する」性質のおかげで、Interp Speed を1つ決めるだけで、ぬるっとした自然な動きになります。目安は次のとおりです。
- 2.0前後: ゆっくり。重い砲塔、大型ボスの旋回
- 5.0前後: 標準。人型の敵が振り向く
- 10.0以上: きびきび。プレイヤーの照準、カメラの追従
LerpとInterp Toは別物
Lerp を使ってみたのに何も動かなかった、というのがもう1つの定番のつまずきです。原因は、Lerp と Interp To が 別の目的のノード だからです。
| Lerp | Interp To | |
|---|---|---|
| すること | AとBを Alphaの割合で混ぜる | 現在値から目標へ 少しずつ近づける |
| Alpha / 進行 | 自分で0→1へ動かす | ノードが勝手に進める |
| 置く場所 | Timelineのカーブから | Event Tick |
| 向いている | 決まった時間 で動かす | 追いかける 動き |

Lerp の Alpha に定数の 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つだけです。
| 変数名 | 型 | 既定値 | 用途 |
|---|---|---|---|
TurnSpeed | Float | 2.0 | 旋回の速さ(Interp Speed に入れる) |
狙う相手はプレイヤーにします。レベルには BP_Turret を1つ置き、プレイヤーが周囲を歩ける状態にしておきます。

つなぎ方
Event Tick に4ステップで組みます。
Get Player Pawnでプレイヤーを取り、Get Actor Locationで位置を得るFind Look at RotationのStartにHeadのGet World Location、Targetにプレイヤーの位置を入れる- 返ってきたRotatorを
Break Rotatorで分解し、YawだけをMake Rotator(Roll = 0.0, Pitch = 0.0)に入れ直す(土台が傾かないように水平だけ回す) RInterp ToのCurrentにHeadのGet World Rotation、Targetに3の結果、Delta TimeにDelta Seconds、Interp SpeedにTurnSpeedを入れ、結果をSet World Rotation(Target: Head)へ渡す
