1.

UE5 RInterp Toの使い方|Rotatorの滑らかな補間とInterp Speed

編集
この記事の要点
  • RInterp To は現在の Rotator から目標 Rotator へ時間ベースで滑らかに補間するノード
  • 入力: Current / Target / Delta Time / Interp Speed。出力は補間 1 フレーム分の Rotator
  • 通常は Event Tick 上で毎フレーム呼び、結果を Set Actor RotationSet World Rotation に流す
  • Interp Speed = 0 は「補間しない=即 Target」、値が大きいほど追いつくのが速い(指数減衰)
  • 位置補間は VInterp To、Float は FInterp To、Quat 版は QInterp To

RInterp To とは

RInterp To(R は Rotator)は UE5 の Blueprint / C++ で使える回転補間ノードです。現在の回転と目標回転を渡すと、Delta Time × Interp Speed に応じて 1 フレーム分だけ目標に近づいた Rotator を返します。Tick 上で繰り返し呼ぶことで、滑らかに回転が変化していきます。

入出力

ピン説明
CurrentRotator現在の回転(多くは Get Actor Rotation 等で取得)
TargetRotator向かわせたい目標回転
Delta Timefloatフレーム間時間。通常 Get World Delta Seconds または Tick の Delta
Interp Speedfloat補間速度。大きいほど早く Target に到達。0 で補間スキップ(Target をそのまま返す)
Return ValueRotator1 フレーム分補間した Rotator

基本的な使い方(Blueprint)

カメラやキャラクターの頭をターゲット方向に滑らかに向ける、典型的な構成は次の通りです。

  1. Event Tick から開始
  2. 現在の Actor Rotation を取得(Get Actor Rotation
  3. 目標 Rotation を計算(例: Find Look At Rotation
  4. RInterp To に Current / Target / Delta / Speed を入力
  5. 結果を Set Actor Rotation へ流す

使用例:カメラを敵のほうへ滑らかに向ける

// C++ 版(UKismetMathLibrary::RInterpTo)
#include "Kismet/KismetMathLibrary.h"

void AMyPlayer::Tick(float DeltaSeconds)
{
    Super::Tick(DeltaSeconds);

    if (!TargetEnemy) return;

    const FRotator Current = GetActorRotation();
    const FRotator Target  = UKismetMathLibrary::FindLookAtRotation(
        GetActorLocation(),
        TargetEnemy->GetActorLocation());

    const FRotator Smoothed = UKismetMathLibrary::RInterpTo(
        Current, Target, DeltaSeconds, /*InterpSpeed=*/5.0f);

    SetActorRotation(Smoothed);
}

Interp Speed の感覚値

Speed挙動用途
0補間しない(即 Target)テスト用 / 補間オフのトグル
1〜2ゆっくり、約 1 秒で 60〜80% 接近映像演出、シネマティック
3〜5標準的な追従カメラ追従、AI の視線
8〜15素早い反応、ほぼ即追従FPS の照準、ロックオン
30 以上1 フレームでほぼ Target事実上「即」と同じ

RInterp To は指数減衰(exponential damping)的に Target へ近づきます。Speed が一定でも残り角度が小さくなるほど 1 フレームあたりの変化量も小さくなるので、自然な減速が得られます。

関連する補間ノード

ノード用途
RInterp ToRotator の補間(本記事)
VInterp ToVector(位置)の補間
FInterp ToFloat の補間
QInterp ToQuaternion の補間(ジンバルロック対策)
RInterp To Constant「角度/秒」固定の等速補間(指数ではない)
Lerp (Rotator)0〜1 の Alpha 指定で線形補間

RInterp To と RInterp To Constant の違い

  • RInterp To: 残り角度が大きいほど速く、近づくほど遅い(イーズアウト風)
  • RInterp To Constant: 一定角速度。バリスティックな動きに向く

注意点

  • 毎フレーム呼ぶ必要がある — 1 回呼ぶだけでは 1 フレーム分しか進まない。Tick または Timer で繰り返す
  • Yaw が ±180 をまたぐとき — RInterp To は短い側の経路を選ぶが、ノーマライズが必要な場面では Normalized Delta Rotator で前処理
  • ジンバルロックが気になる場合 — Pitch が ±90 付近で挙動が崩れることがある。Quaternion 版 QInterp To を検討
  • ポーズ中の Delta Time — ポーズ時に Tick が止まると補間も止まる。ポーズ時も動かしたいなら Tickable Object の bTickEvenWhenPaused を立てる

FAQ

Q: Interp Speed の単位は?
A: 無次元の係数で、内部的には Alpha = clamp(DeltaTime * InterpSpeed, 0, 1) として線形補間に渡しています。「Speed 秒で到達」ではない点に注意。

Q: Target に完全に到達するの?
A: 指数減衰なので数学的には漸近ですが、UE 内部で「近い場合は Target をそのまま返す」しきい値処理があるため、実用上は到達します。

Q: 即座に Target を向けたい
A: Interp To を経由せず Set Actor Rotation に直接 Target を流すか、Interp Speed = 0 を渡してください。

FInterp To / VInterp To との比較

UE5 には Rotator 以外にも同型の Interp To ノードが揃っており、引数は同じ「Current / Target / Delta Time / Interp Speed」構成です。型だけが違います。

ノード戻り型典型用途
FInterp Tofloat体力バーの追従、ズーム値の補間、移動速度の加減速
VInterp ToVector位置の追従、カメラのオフセット移動、フォーカス点
RInterp ToRotator本記事。回転の追従
QInterp ToQuaternionジンバルロックを避けたい回転補間
CInterp ToLinearColor色の変化(フェード、ダメージ点滅など)

実装の中身(参考)

UKismetMathLibrary::RInterpTo の実装は概ね次の形になっています。残り角度に対する補間係数を Delta Time × InterpSpeed で取り、しきい値より小さければ Target をそのまま返します。

FRotator URotator::RInterpTo(const FRotator& Current, const FRotator& Target,
                              float DeltaTime, float InterpSpeed)
{
    if (InterpSpeed <= 0.f) return Target;

    const FRotator Delta = (Target - Current).GetNormalized();
    if (Delta.IsNearlyZero()) return Target;

    const FRotator DeltaMove = Delta * FMath::Clamp(DeltaTime * InterpSpeed, 0.f, 1.f);
    return (Current + DeltaMove).GetNormalized();
}

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ

同階層のページはありません

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