【2026年7月最新】UnityのLerpとSlerpの違いを完全解説|補間関数の仕組みからClaude Codeを使った開発効率化まで
この記事の内容
「オブジェクトを滑らかに動かしたい」「カメラをぬるっと追従させたい」「キャラクターの回転をなめらかにしたい」——Unityでゲームを作っていると、こうした「補間処理」のニーズは頻繁に発生します。そのときに登場するのがLerpとSlerpという2つの関数です。
どちらも「2点間を滑らかにつなぐ」という目的は同じですが、動き方の軌跡が根本的に異なります。この違いを理解せずに「なんとなく使っている」状態では、意図しない挙動でデバッグに時間を取られることになります。
この記事では、LerpとSlerpの仕組みの違い・具体的な使い方・よくある失敗パターンを初心者にもわかりやすく解説します。さらに、Claude Codeを使ってUnity開発の補間処理コードを効率的に書く方法まで紹介します。
この記事で得られる知識:
01 WHAT IS IT LerpとSlerpとは何か:基礎から理解する 補間関数の仕組みを経営の比喩で分かりやすく
LerpとSlerpはどちらも「補間(ほかん)」という処理を行う関数です。補間とは、2つの値の間を滑らかに繋ぐことです。ゲーム開発では、「毎フレーム少しずつ動かすことで、なめらかな動きを実現する」という場面でよく使います。
📚 用語解説
補間(ほかん):2つの値の間の中間値を計算すること。例えばAとBという2つの位置がある場合、t=0.5のときにAとBのちょうど真ん中の位置を返す。ゲームのアニメーションでは「毎フレームtを少しずつ増やしていく」ことで、AからBへの滑らかな移動を実現する。
📚 用語解説
Lerp(Linear Interpolation):線形補間(せんけいほかん)の英略。AとBの2点を直線で結び、その直線上の指定した割合(t)の位置を返す関数。t=0のときA、t=1のときB、t=0.5のときAとBの中点を返す。Unityでは Vector3.Lerp / Mathf.Lerp などで使用する。
📚 用語解説
Slerp(Spherical Linear Interpolation):球面線形補間(きゅうめんせんけいほかん)の英略。2つの向き(回転)を球の表面に沿って滑らかに補間する関数。回転の補間に使い、直線的に動くLerpと異なり、自然な回転軌跡を描く。UnityではQuaternion.Slerpで主に使用する。
シンプルに言えば、Lerpは「直線の道を歩く」、Slerpは「球の表面を沿って歩く」イメージです。目的地(B地点)に向かう際の「道の形」が違うと考えると分かりやすいでしょう。
Lerpは「売上を毎月100万円ずつ均等に伸ばす」という直線的な目標管理。Slerpは「会社の成長軌跡を自然なS字カーブで描く」というイメージです。どちらも同じ目標(最終地点)に向かいますが、途中の経路・速度の変化が異なります。
Unityでは、以下のシーンで頻繁に使います:
02 COMPARISON LerpとSlerpの違いを徹底比較 用途・引数・動き・パフォーマンスの4軸で整理
LerpとSlerpの違いを4つの観点で比較します。表を見た後で、それぞれの詳細を解説します。
| 比較軸 | Lerp | Slerp |
|---|---|---|
| 補間の種類 | 線形補間(直線) | 球面線形補間(曲線) |
| 主な用途 | 位置・色・サイズ・スカラー値の補間 | 回転(Quaternion)の補間 |
| 使用関数 | Vector3.Lerp / Mathf.Lerp / Color.Lerp | Quaternion.Slerp / Vector3.Slerp |
| 引数の形式 | (A, B, t) | (A, B, t) |
| t=0のとき | A を返す | A を返す |
| t=1のとき | B を返す | B を返す |
| t=0.5のとき | AとBの直線の中点 | AとBの球面上の中点(角度的な中間) |
| 動きの軌跡 | 直線 | 円弧(球面) |
| 回転の自然さ | 不自然になりやすい | 自然な回転軌跡 |
| 計算コスト | 低い | やや高い(三角関数を使用) |
2-1. 位置の補間でLerpとSlerpを使うと何が違うか
位置(Vector3)の補間にLerpを使うと、2点を結ぶ直線上をまっすぐ進みます。一方、Vector3.Slerpを使うと、原点(0,0,0)を中心とした球の表面を弧を描いて進む動きになります。これは「向き(方向ベクトル)」の補間をしたいときに意味がありますが、単純な「A地点からB地点への移動」にはLerpの方が直感的で適しています。
ゲームでよく見る「敵がプレイヤーに向かってゆっくり近づく」「カメラがプレイヤーを追いかける」という動きは、Vector3.Lerpで実現するのが標準的です。「弧を描いて動く」ような特殊演出の場合のみVector3.Slerpを使います。
2-2. 回転の補間でSlerpが必要な理由
回転補間でLerpを使うと問題が起きます。Unityの回転はQuaternion(クォータニオン)というデータ形式で管理されており、このQuaternionの各要素(x, y, z, w)を直線補間すると、補間経路の中間で「回転軸が歪む」「速度が不均一になる」という問題が発生します。
Slerpはこの問題を解決するために設計されており、2つのQuaternion間を球の表面に沿って一定速度で補間することで、自然で安定した回転アニメーションを実現します。
📚 用語解説
Quaternion(クォータニオン):Unityで3D回転を表すデータ形式。x・y・z・wという4つの値で構成される。直感的に理解しにくいが、ジンバルロック(特定角度で回転軸が重なる問題)を回避できる利点があり、3Dゲームの回転処理の標準形式として広く使われている。Slerp補間はこのQuaternionの特性に合わせて設計されている。
03 LERP USAGE Lerpの使い方:コードサンプルと実践例 Vector3.Lerp / Mathf.Lerp / Color.Lerp の基本
それでは実際のコードを見ながら、Lerpの使い方を確認します。UnityのC#スクリプトでの記述方法と、よくある実践例を紹介します。
3-1. Vector3.Lerp:位置の補間
最も基本的なLerpの使い方は、オブジェクトをA地点からB地点に滑らかに移動させることです。
using UnityEngine;
public class LerpExample : MonoBehaviour
{
public Transform startPoint; // 開始位置
public Transform endPoint; // 終了位置
public float speed = 1f; // 移動速度
private float t = 0f; // 補間パラメータ(0〜1)
void Update()
{
// tを毎フレーム増やす
t += Time.deltaTime * speed;
t = Mathf.Clamp01(t); // 0〜1の範囲に収める
// Lerpで位置を補間
transform.position = Vector3.Lerp(
startPoint.position,
endPoint.position,
t
);
}
}
このコードで重要なポイントが2つあります。第一にTime.deltaTimeを掛けること。これにより、フレームレートに関係なく一定速度で移動できます(フレームレート依存問題の回避)。第二にMathf.Clamp01(t)でtを0〜1の範囲に制限すること。これをしないとt>1になり、終点を通り越して進み続ける問題が起きます。
3-2. カメラ追従にLerpを使う(よく使うパターン)
Lerpの最も典型的な活用例の一つが、カメラをプレイヤーに追従させるカメラスクリプトです。
using UnityEngine;
public class SmoothCameraFollow : MonoBehaviour
{
public Transform target; // 追従するターゲット(プレイヤー)
public float smoothSpeed = 5f; // 追従の滑らかさ
public Vector3 offset; // カメラとターゲットの距離
void LateUpdate()
{
// ターゲットの位置にオフセットを加えた目標位置を計算
Vector3 desiredPosition = target.position + offset;
// 現在位置から目標位置にLerpで滑らかに移動
Vector3 smoothedPosition = Vector3.Lerp(
transform.position, // 現在のカメラ位置
desiredPosition, // 目標位置
smoothSpeed * Time.deltaTime
);
transform.position = smoothedPosition;
}
}
このパターンは「追従の滑らかさ(smoothSpeed)」で追いかける速度を調整できます。smoothSpeedが小さいほどゆっくり・大きいほどキビキビと追従します。LateUpdate()を使うのは、プレイヤーの位置が確定してからカメラを動かすためです。
Vector3.Lerp以外にも、Mathf.Lerpでスカラー値(単一の数値)を補間したり、Color.Lerpで色を滑らかに変化させたりすることができます。例えばスコアの表示数値をゆっくり増加させたり、ダメージを受けたとき画面を赤くフェードさせるエフェクトに活用できます。
04 SLERP USAGE Slerpの使い方:コードサンプルと実践例 Quaternion.Slerp の基本と回転アニメーションへの応用
次にSlerpの使い方を見ていきます。主な使い場所は回転(Quaternion)の補間で、キャラクターの向き変更・武器の回転・ターゲットへの追従回転などに活用します。
4-1. Quaternion.Slerp:回転の補間
using UnityEngine;
public class SlerpExample : MonoBehaviour
{
public Transform target; // 向きを合わせるターゲット
public float rotateSpeed = 3f; // 回転速度
void Update()
{
// ターゲット方向を向くためのQuaternionを計算
Vector3 direction = target.position - transform.position;
Quaternion targetRotation = Quaternion.LookRotation(direction);
// 現在の向きからターゲットの向きにSlerpで補間
transform.rotation = Quaternion.Slerp(
transform.rotation, // 現在の回転
targetRotation, // 目標の回転
rotateSpeed * Time.deltaTime
);
}
}
このコードでは、毎フレームターゲットの方向を再計算して、現在の回転からSlerpで滑らかに回転しています。Quaternion.LookRotation(direction)は「direction方向を向いたときのQuaternion」を計算する便利な関数です。
4-2. キャラクターの向き変更に使うパターン
using UnityEngine;
public class CharacterRotation : MonoBehaviour
{
public float turnSpeed = 5f;
void Update()
{
// プレイヤーの入力で移動方向を取得
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector3 moveDir = new Vector3(horizontal, 0, vertical).normalized;
// 移動方向に向きを合わせる
if (moveDir != Vector3.zero)
{
Quaternion targetRot = Quaternion.LookRotation(moveDir);
transform.rotation = Quaternion.Slerp(
transform.rotation,
targetRot,
turnSpeed * Time.deltaTime
);
}
}
}
このパターンは「移動方向にキャラクターが向く」という動きを滑らかに実現します。入力がない(moveDir == Vector3.zero)ときは回転処理をスキップすることで、キャラクターが突然0方向を向く問題を防いでいます。
📚 用語解説
LookRotation(ルックローテーション):Quaternion.LookRotationは「引数の方向(ベクトル)を向いたときの回転(Quaternion)」を返す関数。例えばLookRotation(targetPos - myPos)を使うと「ターゲット方向を向くQuaternion」が得られる。Slerpと組み合わせて「ターゲットを滑らかに追う回転」を実現するのが定番パターン。
05 USE CASES よく使うユースケース:カメラ追従・回転・UI演出 実践的なシーン別・最適な補間関数の選び方
LerpとSlerpのどちらを使うか迷ったとき、以下のシーン別の選択基準を参考にしてください。
| ユースケース | 推奨 | メモ |
|---|---|---|
| オブジェクトをA→Bへ滑らかに移動 | Vector3.Lerp | 最も基本的な使い方 |
| カメラがプレイヤーを追従 | Vector3.Lerp | LateUpdate内で現在位置→目標位置へLerp |
| キャラクターの向き変更 | Quaternion.Slerp | 回転なので必ずSlerp |
| 武器・頭・体の回転アニメーション | Quaternion.Slerp | LookRotation + Slerpが定番 |
| UIパネルのフェードイン・アウト | Mathf.Lerp | アルファ値(透明度)の補間 |
| 色の変化(ダメージエフェクトなど) | Color.Lerp | 赤フラッシュ・昼夜サイクルなど |
| スコア表示の数値アニメーション | Mathf.Lerp | 「0から1000」へのカウントアップ演出 |
| 弧を描いて移動する特殊演出 | Vector3.Slerp | 球面移動が必要な特殊ケース |
5-1. 昼夜サイクルでLerpを使う例
Lerpの少し発展した活用例として、ゲーム内の昼夜サイクル(空の色が変わる演出)があります。昼の空色から夕焼け色→夜の色へとColor.Lerpで補間することで、リアルな昼夜変化を実現できます。
using UnityEngine;
public class DayCycleEffect : MonoBehaviour
{
public Color dayColor = Color.blue;
public Color nightColor = new Color(0.05f, 0.05f, 0.15f);
public float dayDuration = 60f; // 1日のゲーム内時間(秒)
private float timer = 0f;
void Update()
{
timer += Time.deltaTime;
float t = Mathf.PingPong(timer / dayDuration, 1f); // 0→1→0 を繰り返す
// 昼と夜の色をLerpで補間
Camera.main.backgroundColor = Color.Lerp(dayColor, nightColor, t);
// 平行光源の輝度も変化させる(任意)
RenderSettings.ambientLight = Color.Lerp(Color.white * 0.8f, Color.gray * 0.2f, t);
}
}
Mathf.PingPong(time, 1f) は 0→1→0→1... と繰り返す波形を作る便利な関数。昼夜サイクルのようなループ演出に組み合わせると、タイマーのリセット処理を書かなくて済みます。
06 PITFALLS よくある失敗・落とし穴と対処法 Lerp/Slerpで詰まりやすいポイントを先回りで解説
LerpとSlerpを使い始めたときによくある失敗パターンと、その原因・解決策を整理します。
失敗1:t=1に永遠に届かない(非常によくある問題)
LerpとSlerpを以下のように書くと、理論上は終点(B)に永遠に届きません。
// NG例:t=1に届かない書き方
void Update()
{
// 「現在位置からターゲットにLerp」パターン
transform.position = Vector3.Lerp(transform.position, target.position, 0.1f);
}
このコードは毎フレーム「現在位置からターゲットまでの10%」進みます。距離が縮まるにつれて1回の移動量も減るため、数学的にはターゲットに到達しません(ゼノンのパラドックスと同じ構造)。実用上はごく近くまで来たら「到達とみなす」処理を追加するか、tを別途管理して上限を設けるのが正しいアプローチです。
// OK例:tを別管理してClamp01を使う
private float t = 0f;
void Update()
{
t += Time.deltaTime * speed;
t = Mathf.Clamp01(t);
transform.position = Vector3.Lerp(startPos, endPos, t);
if (t >= 1f) { /* 到達時の処理 */ }
}
失敗2:フレームレート依存の動き
// NG例:フレームレート依存
transform.position = Vector3.Lerp(transform.position, target.position, 0.05f);
// OK例:Time.deltaTimeで正規化
transform.position = Vector3.Lerp(transform.position, target.position, speed * Time.deltaTime);
Time.deltaTimeなしでtの変化量を固定にすると、60FPSと30FPSのデバイスで動きの速さが変わります。必ずTime.deltaTimeを掛けてフレームレートに依存しない実装にしましょう。
失敗3:Quaternionに対してLerpを使う
「Quaternion.Lerp」という関数も存在しますが、回転補間には「Quaternion.Slerp」を使うのが原則です。Quaternion.LerpはSlerpより計算コストが低い代わりに、回転角度が大きいときに速度が不均一になります。パフォーマンスが特に問題になる場面以外はSlerp一択で問題ありません。
失敗4:Updateで毎フレームLookRotationを再計算する無駄
LookRotationは毎フレーム呼んでも大きな問題はありませんが、ターゲットが静止している間も無駄に計算しています。ターゲットが動いているかどうかを判定して、移動していないときはスキップする処理を加えると最適化できます。
07 CLAUDE CODE × UNITY Claude Codeで補間処理コードを効率化する方法 AI鬼管理の実践:Unity開発でClaude Codeを使う
ここからが弊社GENAIの実践です。Claude CodeをUnity開発に組み込むと、補間処理のコードを書く時間を大幅に削減できます。具体的な活用方法を紹介します。
言語化する
「カメラが
プレイヤーを追う」
コードを依頼
「Unity C#で
LerpでSmoothFollowを」
確認・修正
パラメータ調整
エラー修正
貼り付け
アタッチして
動作確認
追加で依頼
「もっとスムーズに」
「速度調整を追加」
7-1. Claude Codeへの効果的なプロンプト例
Claude CodeにUnity開発の補間処理を依頼する際、以下のようなプロンプトが効果的です。
| やりたいこと | Claude Codeへのプロンプト例 |
|---|---|
| カメラ追従 | 「Unity C#でVector3.Lerpを使ったSmoothCameraFollowスクリプトを書いて。プレイヤーのTransformを追いかけ、offset・smoothSpeedをInspectorで調整できるようにして」 |
| キャラ向き変更 | 「Unity C#でQuaternion.Slerpを使い、移動方向にキャラクターがなめらかに向くスクリプトを書いて。Rigidbodyを使った移動と組み合わせること」 |
| 昼夜サイクル | 「Unity C#でColor.Lerpを使った昼夜サイクル演出を書いて。dayColor・nightColorをInspectorで設定でき、dayDurationで1日の長さを秒単位で指定できるようにして」 |
| UIフェード | 「Unity C#でMathf.LerpとCanvasGroupのalphaを使ったフェードイン・アウトアニメーションをコルーチンで書いて」 |
重要なのは「Lerp/Slerpどちらを使うか」「どのパラメータをInspectorで調整したいか」「特定のコンポーネント(Rigidbody等)との組み合わせ条件」を明示することです。これらを具体的に書くと、そのまま動くコードが1回のやり取りで出てくることがほとんどです。
7-2. バグ修正・最適化もClaude Codeで
既存のLerp/Slerpコードに問題が出たときも、コードをClaude Codeに貼り付けて「このコードでtが1に届かない問題が起きています。原因と修正方法を教えて」と聞くだけで、問題点の説明と修正コードが得られます。
弊社GENAIでのUnity案件では、Claude Codeの活用でコード作成・デバッグにかかる時間を50〜70%削減できています。特に「典型的なパターンのコード(カメラ追従・補間アニメーション・UI演出)」はClaude Codeが非常に得意とする領域で、ほぼ完成形のコードが出力されます。
経営者・プランナー・デザイナーが「こういう動きを実装してほしい」という要望をClaude Codeに伝え、出力されたコードをエンジニアが確認・調整するというワークフローも実現できます。Claude Codeが「要件をコードに翻訳する中間役」になることで、技術的なコミュニケーションのハードルが下がります。
08 CONCLUSION まとめ:Lerp/Slerpを使いこなしてゲームをなめらかに 使い分けの基本ルールと、AI時代の開発効率化の実践
この記事では、UnityのLerpとSlerpについて、基礎・違い・コードサンプル・実践例・よくある失敗・Claude Code活用まで解説しました。最後に要点を振り返ります。
「位置はLerp、回転はSlerp」という基本ルールを覚えておけば、9割のユースケースには対応できます。残りの1割(特殊な弧を描く移動や複雑なアニメーション)は、Claude Codeに要件を伝えて最適なコードを生成してもらうアプローチが効率的です。
Unity開発・ゲーム制作のAI活用を一緒に設計します
Claude Codeを使ったUnity開発の効率化・AI機能の組み込み・業務ゲームの制作支援まで、
弊社のAI鬼管理サービスで幅広くご支援します。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. LerpとSlerpどちらを使えばいいか迷ったときの判断基準は?
A. 「何を補間したいか」で決めます。位置(Vector3)・色(Color)・数値(float)はLerp、回転(Quaternion)はSlerpが原則です。「直線で動いてほしい」→Lerp、「自然に回転してほしい」→Slerpと覚えておけば、大半のケースで正しい選択ができます。
Q. Lerpでtが1に届かない問題の原因と解決方法は?
A. 「現在位置から目標位置にLerp」パターン(transform.position = Lerp(transform.position, target, t))を使ったとき、距離が縮まるにつれて移動量も減り理論上は到達しません。解決策は「tを別変数で管理してClamp01を使う」または「Vector3.MoveTowards を使って一定速度で移動する」かです。
Q. Quaternion.LerpとQuaternion.Slerpの違いは?
A. 計算コストと精度の違いです。Lerpはパフォーマンスが高いですが、回転角度が大きい場合に途中の速度が不均一になります。Slerpは計算が若干重いですが、常に一定速度で自然な回転を実現します。パフォーマンスに余裕があれば(ほとんどの場合)Slerpを推奨します。
Q. UnityでSmoothDampとLerpはどう使い分けますか?
A. SmoothDampは「慣性を持たせたい(動き出しと停止に滑らかさを持たせたい)」場合に向いています。Lerpは「AからBへ一定のロジックで補間する」シンプルな場合に向いています。SmoothDampの方が自然な加速・減速を実現しやすい反面、引数が多く設定がやや複雑です。
Q. Claude CodeでUnity開発を効率化するには何を伝えればいいですか?
A. 「Unity C#で○○を実現するスクリプトを書いて」という指示に加え、「使用するコンポーネント(Rigidbody等)」「Inspectorで調整したいパラメータ名」「Update/FixedUpdate/LateUpdateどこで処理するか」を明記すると、そのまま使えるコードが出力されやすいです。
Q. Lerpアニメーションをコルーチンで実装する方法は?
A. IEnumerator(コルーチン)を使うと「Updateとは独立したタイミング」でLerpアニメーションを実行できます。「yield return null」でフレームを待ちながら「t += Time.deltaTime * speed」でtを増やし、「Lerp(start, end, t)」で補間するというパターンが基本です。UIのフェード・単発の移動アニメーションなど「一度だけ実行したい処理」に向いています。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




