ゲーム開発で回転を滑らかに実装しようとすると、Slerpという言葉に出会います。
「Slerpって何?」
「Lerpとはどう違うの?」
「どうやって使うの?」
そんな疑問を抱えている方に向けて、Slerpの基本概念から実装方法まで、初心者でも理解できるように詳しく解説します。
\読むだけで終わらせない!実際にゲームを作って実力をつけよう/
トレンド×入門に最適
Unity ノンフィールドRPG
+スレスパ風JRPG講座
Unity6対応・スマホ化対応の最新カリキュラム。今もっとも人気のデッキ構築型ゲームをJRPGと組み合わせて実装。初心者が最初に選ぶ一本として最適です。
王道アクションに挑戦
Unity 2Dアクションゲーム
の作り方講座(ロックマン風)
ロックマン風の本格横スクロールACTをスマホ化・広告実装まで対応。7ステージ+ラスボスという市販ゲームに近い本格構成で、リリースまで見据えて作れます。
3D入門に最適
ゼルダ風3Dアクションゲーム
の作り方講座
ゼルダの伝説・モンハン・原神のような3Dアクションをスマホ対応で作れる入門講座。初心者でも全16回でしっかり3D開発の基礎を習得できます。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
Slerpとは何か

SlerpはSpherical Linear Interpolation(球面線形補間)の略称で、回転を滑らかに補間する関数です。
Lerpが直線的に補間するのに対し、Slerpは球面上を滑らかに補間します。
回転(Quaternion)の補間には、Slerpを使うのが一般的です。
基本的な概念
Slerpは、2つの回転(Quaternion)の間を、指定した割合(0.0〜1.0)で補間します。
0.0なら開始の回転、1.0なら終了の回転、0.5なら中間の回転といった具合です。
回転は球面上の点として扱われるため、最短経路で滑らかに補間されます。
Lerpとの違い
LerpとSlerpの主な違いは、補間の方法です。
- Lerp:直線的に補間(位置や色の補間に適している)
- Slerp:球面上を補間(回転の補間に適している)
回転をLerpで補間すると、角速度が一定にならないため、不自然な動きになる場合があります。
Slerpを使えば、角速度が一定に保たれ、より自然な回転が実現できるんです。
- 回転を滑らかに補間する
- 球面上を最短経路で補間する
- 角速度が一定に保たれる
- Quaternionの補間に最適
UnityでのSlerpの実装方法

Unityでは、Quaternion.Slerpを使って回転を補間できます。
実際の使用例を見ていきましょう。
基本的なSlerpの使い方
回転の補間には、Quaternion.Slerpを使用します。
|
1 2 3 4 5 6 7 |
Quaternion startRotation = Quaternion.Euler(0, 0, 0); Quaternion endRotation = Quaternion.Euler(0, 90, 0); float t = 0.5f; Quaternion currentRotation = Quaternion.Slerp(startRotation, endRotation, t); transform.rotation = currentRotation; |
この例では、0度から90度への回転を、0.5(50%)で補間しています。
時間ベースのSlerp
フレームレートに依存しない滑らかな回転を実現するには、時間ベースのSlerpを使用します。
|
1 2 3 4 5 6 7 8 |
public float rotationSpeed = 2.0f; void Update() { float t = Time.deltaTime * rotationSpeed; transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, t); } |
Time.deltaTimeを使うことで、フレームレートに関係なく一定の角速度で回転できます。
固定時間での回転
指定した時間で回転を完了させたい場合の例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public float rotationDuration = 2.0f; private float timer = 0f; private Quaternion startRotation; private Quaternion endRotation; void Start() { startRotation = transform.rotation; endRotation = Quaternion.Euler(0, 90, 0); } void Update() { timer += Time.deltaTime; float t = timer / rotationDuration; t = Mathf.Clamp01(t); transform.rotation = Quaternion.Slerp(startRotation, endRotation, t); } |
これにより、指定した時間(rotationDuration)で回転が完了します。
- 回転の補間には必ずSlerpを使う(Lerpは使わない)
- Time.deltaTimeを使ってフレームレートに依存しない動きにする
- tの値は0.0から1.0の範囲が推奨される
- 毎フレームSlerpを呼ぶ場合、最終回転に到達しない場合がある
Slerpの実践的な使用例

Slerpを使った実践的な例を見ていきましょう。
オブジェクトの滑らかな回転
オブジェクトを目標の回転へ滑らかに回転させる例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class SmoothRotation : MonoBehaviour { public Transform target; public float rotationSpeed = 2.0f; void Update() { if (target != null) { Quaternion targetRotation = Quaternion.LookRotation(target.position - transform.position); float t = Time.deltaTime * rotationSpeed; transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, t); } } } |
このスクリプトにより、オブジェクトがターゲットの方向へ滑らかに回転します。
カメラの滑らかな回転
カメラを滑らかに回転させる例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class SmoothCameraRotation : MonoBehaviour { public float rotationSpeed = 2.0f; private Quaternion targetRotation; void Update() { // マウス入力から目標回転を計算 float mouseX = Input.GetAxis("Mouse X") * rotationSpeed; float mouseY = Input.GetAxis("Mouse Y") * rotationSpeed; targetRotation *= Quaternion.Euler(-mouseY, mouseX, 0); // Slerpで滑らかに回転 float t = Time.deltaTime * 5.0f; transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, t); } } |
これにより、カメラがマウスの動きに滑らかに追従します。
武器の回転アニメーション
武器を回転させてアニメーションする例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
public class WeaponRotation : MonoBehaviour { public float rotationAngle = 90f; public float rotationDuration = 0.5f; private float timer = 0f; private Quaternion startRotation; private Quaternion endRotation; private bool isRotating = false; public void StartRotation() { startRotation = transform.rotation; endRotation = startRotation * Quaternion.Euler(0, rotationAngle, 0); timer = 0f; isRotating = true; } void Update() { if (isRotating) { timer += Time.deltaTime; float t = timer / rotationDuration; if (t >= 1f) { transform.rotation = endRotation; isRotating = false; } else { transform.rotation = Quaternion.Slerp(startRotation, endRotation, t); } } } } |
これにより、武器が指定した角度だけ滑らかに回転します。

まずは簡単な回転から始めて、徐々に応用的な使い方を覚えていきましょう。
Slerpの実装手順

※この順番を守らずに作り始めると、だいたい後で全部作り直すことになります。
- STEP1開始回転と終了回転を決定
補間したい開始回転(startRotation)と終了回転(endRotation)を決定します。Quaternion.EulerやQuaternion.LookRotationなどを使って作成。
- STEP2補間の進行度を計算
Time.deltaTimeを使って、フレームレートに依存しない進行度を計算します。rotationSpeedパラメータで回転の速度を調整可能。
- STEP3Slerp関数を呼び出し
Quaternion.Slerpを呼び出して、補間された回転を計算します。進行度tは0.0から1.0の範囲に収めるように注意。
- STEP4結果を適用
Slerpの結果をTransform.rotationに適用します。毎フレーム呼び出すことで、滑らかな回転が実現。
- STEP5動作確認と調整
実際に動かして、回転速度や動きを確認します。必要に応じてrotationSpeedパラメータを調整して、好みの動きにしましょう。
LerpとSlerpの使い分け

LerpとSlerpの使い分けを理解しておくことが大切です。
Lerpを使う場面
Lerpは、以下のような場面で使用します。
- 位置の補間(Vector3)
- 色の補間(Color)
- 数値の補間(float)
直線的な補間が必要な場面では、Lerpが適しています。
Slerpを使う場面
Slerpは、以下のような場面で使用します。
- 回転の補間(Quaternion)
- 角速度を一定に保ちたい場合
- 球面上を補間したい場合
回転の補間には、必ずSlerpを使いましょう。
比較例
実際に比較してみましょう。
|
1 2 3 4 5 6 7 8 9 |
// 位置の補間 → Lerp transform.position = Vector3.Lerp(startPos, endPos, t); // 回転の補間 → Slerp transform.rotation = Quaternion.Slerp(startRot, endRot, t); // 色の補間 → Lerp material.color = Color.Lerp(startColor, endColor, t); |
位置や色にはLerp、回転にはSlerpと覚えておきましょう。
- 位置・色・数値 → Lerp
- 回転(Quaternion) → Slerp
- 角速度を一定に保ちたい → Slerp
- 直線的な補間が必要 → Lerp
よくある問題と解決方法

Slerpを使う際によくある問題と、その解決方法を紹介します。
最終回転に到達しない
毎フレームSlerpを呼び出す場合、理論上は最終回転に到達しません。
解決方法は、十分に近づいたら最終回転を設定すること。
|
1 2 3 4 5 6 7 8 9 10 11 |
float angle = Quaternion.Angle(transform.rotation, targetRotation); if (angle < 1f) { transform.rotation = targetRotation; } else { float t = Time.deltaTime * rotationSpeed; transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, t); } |
Quaternion.Angleで角度差を取得し、十分に近づいたら最終回転を設定します。
回転が逆方向に進む
Slerpは最短経路で補間するため、大きな角度差がある場合、逆方向に回転することがあります。
解決方法は、角度差をチェックして、必要に応じて補間方法を調整すること。
|
1 2 3 4 5 6 7 |
float angle = Quaternion.Angle(startRotation, endRotation); if (angle > 180f) { // 逆方向の回転を避ける処理 endRotation = Quaternion.Inverse(endRotation); } |
動きが不自然になる
rotationSpeedが速すぎたり、遅すぎたりすると、動きが不自然に見えます。
適切な値を見つけるには、試行錯誤が必要。
一般的には、1.0から5.0の範囲が使いやすいです。
- 最終回転に到達しない → 角度差をチェックして、十分に近づいたら最終回転を設定
- 回転が逆方向 → 角度差をチェックして、必要に応じて調整
- 動きが不自然 → rotationSpeedパラメータを調整する
- 補間が遅い → Time.deltaTimeを必ず使う
Slerpの応用テクニック

基本的なSlerpを理解した後は、応用的な使い方も覚えていきましょう。
イージング関数との組み合わせ
Slerpのt値に、イージング関数を適用することで、より自然な動きを実現できます。
|
1 2 3 4 5 6 7 8 |
float EaseInOut(float t) { return t * t * (3f - 2f * t); } float easedT = EaseInOut(t); transform.rotation = Quaternion.Slerp(startRotation, endRotation, easedT); |
これにより、加速と減速のある滑らかな回転になります。
複数の軸の同時補間
位置、回転、スケールなど、複数の要素を同時に補間することも可能です。
|
1 2 3 4 5 6 7 8 9 |
void Update() { float t = Time.deltaTime * speed; transform.position = Vector3.Lerp(transform.position, targetPosition, t); transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, t); transform.localScale = Vector3.Lerp(transform.localScale, targetScale, t); } |
これにより、複数の要素を同時に滑らかに変化させられます。
Slerpの学習を深めるには

Slerpの基礎を理解した後は、さらに深く学んでいくことが大切です。
Unity入門の森では、ゲーム開発に必要な数学とアニメーションの知識を体系的に学べる環境が整っています。
特に、永久会員チケットでは、Slerpだけでなく、アニメーション、物理演算など、関連する知識も幅広くカバーしています。
また、2Dアクションゲーム講座では、実際にゲームを作りながら、Slerpの実践的な使い方を身につけられます。
回転補間の基礎から応用まで、実際のコードと紐付けて学べるので、理解が深まりやすいはずです。
- Slerpとは何か、基本的な概念とLerpとの違い
- UnityでのSlerpの実装方法
- 実践的な使用例(回転、カメラ、武器アニメーションなど)
- よくある問題と解決方法
- LerpとSlerpの使い分け
記事を読んで「作ってみたい!」と思ったら!人気ゲームを題材にした講座で実力をつけよう
知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを1本完成させることで、理解が一気に深まります。人気タイトルをモデルにした講座で、ゲーム開発の第一歩を踏み出しましょう。
Unity ノンフィールドRPG+スレスパ風JRPG講座【Unity6対応!トレンドのデッキ構築×JRPGをスマホ向けに作れる!】

- Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
- Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
- 初心者でも取り組みやすい丁寧な解説構成
- ノンフィールドRPGとデッキ構築JRPGの2つを合わせて学ぶのがおすすめ
Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、今もっともトレンドのデッキ構築型ゲームシステムをJRPGと組み合わせて実装する方法を学べる講座です。
Unity6対応・スマホ化対応の最新カリキュラムで、コラムやTIPSで読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。
「Slay the Spireみたいなゲームを自分でも作ってみたい!」という人の最初の一歩として最適な講座です。
Unity6対応・スマホ化対応の最新カリキュラム
トレンドのデッキ構築×JRPGを最速で実装しよう
→ スレスパ風デッキ構築JRPG講座を見てみる
スマホ対応の最新環境で、ゲーム開発の第一歩を踏み出そう!
Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!スマホ化・広告実装まで対応した本格横スクロールACTを作れる!】

- ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
- 7ステージ+ラスボスステージの市販ゲームに近い本格的なゲーム設計
- スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
- 敵AI15体・多彩なマップギミック・武器システムを完全実装
- 完全オリジナルゲームをアセット不使用で素材提供付きで制作
Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを開発できるようになる本格的な講座です。
TIPSやコラムで学んだ当たり判定・物理挙動・敵AIの知識を、実際のゲームコードとして実装する体験が全16回に凝縮されています。スマホ化・広告実装まで対応しているため、作って終わりではなくリリースまで見据えた実践スキルが身につきます。
「読んで理解した知識を、動くゲームとして形にしたい」という人に強くおすすめの一本です。
スマホ化・広告実装まで対応した本格横スクロールACT
ロックマン風の2Dアクションゲームをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
広告収益まで視野に入れた実践スキルを今すぐ手に入れよう!
ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

- ゼルダの伝説・モンハン・原神のような3Dアクションをゼロから開発
- 初心者でも取り組みやすい丁寧な解説構成
- スマホ化対応で実機で動かせるゲームが完成
- アセットを使った実践的なゲーム開発手法が身につく
- 画像・動画・全ソースコード公開の充実したサポート
ゼルダ風3Dアクションゲームの作り方講座は、ゼルダの伝説・モンハン・原神のような本格的な3Dアクションゲームを作りたい人におすすめの入門講座です。
コラム・TIPSで「3Dゲームはなんとなく難しそう」と感じていた人でも、全16回の丁寧な解説で確実に完成まで到達できます。スマホ化対応で実機で動かせるため、作った達成感がひときわ大きい講座です。
「3Dゲームの仕組みを理解した次は、実際に自分で作ってみたい」という人の最初の一歩として最適です。
初心者でも3Dアクションがスマホ対応で完成する
ゼルダ風3Dアクションゲームで3D開発の第一歩を踏み出そう
→ ゼルダ風3Dアクションゲームの作り方講座を見てみる
3D開発の壁を一気に突破!スマホで動くオリジナルゲームを完成させよう!
まとめ

この記事では、Slerpとは何かについて解説しました。
Slerpは、回転を滑らかに補間する関数で、ゲーム開発において非常に重要なツールです。
Lerpと違って球面上を補間するため、回転の補間には最適。
「Slerpって難しそう💧」と感じる方もいるかもしれませんが、基本的な使い方を理解すれば、様々な場面で活用できるようになります。
まずは簡単な回転から始めて、徐々に応用的な使い方を覚えていきましょう。
- Slerpは回転を滑らかに補間する関数
- 球面上を最短経路で補間するため、角速度が一定に保たれる
- 回転の補間には必ずSlerpを使う(Lerpは使わない)
- 位置や色にはLerp、回転にはSlerpと使い分ける
- Time.deltaTimeを使ってフレームレートに依存しない動きを実現する
まずは簡単な回転から始めて、徐々に応用的な使い方に挑戦していきましょう。
Unity入門の森では、Slerpの基礎から応用まで、実践的な知識を体系的に学べる環境が整っています。
疑問があれば、ぜひ活用してみてください。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。





コメント