3Dゲームでオブジェクトを回転させたい。
オイラー角を使うと、ジンバルロックという問題が発生する。
でも、クォータニオンという言葉を聞いたことがあっても、どういうものなのか分からない。
実は、クォータニオンは3D回転を正しく扱うための数学的表現です。
Unityでは、Transformコンポーネントのrotationプロパティが、まさにクォータニオンです。
この記事では、クォータニオンとは何かを、Unity実装例とともに解説します。
- クォータニオンという言葉は聞いたことがあるが、何なのか分からない…
- オイラー角を使っていると、ジンバルロックが発生してしまう。
- 3D回転を正しく扱う方法を知りたい。
✨ この記事でわかること
- クォータニオンの基本概念と定義
- オイラー角との違いとメリット
- ジンバルロックを回避できる理由
- Unityでのクォータニオンの使い方
- 初心者でも理解できる回転処理の基礎
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます
クォータニオンとは何か(ゲーム制作目線)

クォータニオンは、3D空間での回転を表現するための数学的なデータ構造です。
3つの値(X、Y、Z)で表現するオイラー角とは異なり、4つの値(X、Y、Z、W)で回転を表現します。
クォータニオンの最大の特徴は、ジンバルロックを回避できることです。
オイラー角では、特定の角度で回転軸が失われてしまう問題がありますが、クォータニオンではこの問題が発生しません。
Unityでは、Transform.rotationプロパティがQuaternion型で、内部でクォータニオンとして管理されています。
ゲームでの具体的な使い道

クォータニオンが、ゲームでどう使われているか確認してみましょう。
オブジェクトの回転
3Dオブジェクトの回転には、クォータニオンが使われます。
UnityのTransform.rotationは、クォータニオン型なので、自動的にクォータニオンで管理されます。
カメラの回転
FPSゲームなどで、マウスの動きに合わせてカメラを回転させる際、クォータニオンを使います。
オイラー角を使うと、特定の角度でカメラがロックされる問題が発生しますが、クォータニオンなら回避できます。
キャラクターの向き変更
キャラクターが移動方向に向きを変える際、クォータニオンを使って滑らかに回転させます。
Quaternion.LookRotationやQuaternion.Slerpを使って、自然な回転を実現します。
補間による滑らかな回転
クォータニオンは、Slerp(球面線形補間)を使って、2つの回転状態の間を滑らかに補間できます。
オイラー角での補間は不自然な動きになることがありますが、クォータニオンなら常に滑らかです。
- 3Dオブジェクトの回転処理
- FPSカメラの回転
- キャラクターの向き変更
- 滑らかな回転の補間(Slerp)
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

クォータニオンは、回転軸と回転角度を組み合わせた表現です。
クォータニオンの構造
クォータニオンは、X、Y、Z、Wの4つの値で構成されます。
X、Y、Zは回転軸を表すベクトルの成分、Wは回転角度に関連する値です。
数学的には、複素数の拡張として定義されますが、ゲーム開発では回転を表現するデータとして理解すれば十分です。
オイラー角との違い
オイラー角は、X軸、Y軸、Z軸の順に回転させる角度を3つの値で表現します。
一方、クォータニオンは、1つの回転軸と角度で表現するため、ジンバルロックが発生しません。
回転の合成
クォータニオンは、掛け算(*)で合成できますね。
複数の回転を順番に適用する場合、クォータニオンの掛け算で1つのクォータニオンにまとめられます。
逆回転
クォータニオンの逆は、共役を取ることで計算できます。
Unityでは、Quaternion.Inverse関数で逆を取得できます。
- クォータニオンは4つの値(X、Y、Z、W)で3D回転を表現する
- オイラー角と異なり、ジンバルロックが発生しない
- 回転の合成は掛け算で行う
- UnityのTransform.rotationはクォータニオン型
Unityで実装する際の注意点(代表例)

Unityでクォータニオンを使う場合の注意点を見ていきましょう。
Transform.rotationの使い方
UnityのTransform.rotationは、既にクォータニオン型です。
|
1 2 3 4 5 6 |
// オブジェクトを回転させる transform.rotation = Quaternion.Euler(0, 90, 0); // オイラー角からクォータニオンに変換 // 現在の回転を取得 Quaternion currentRotation = transform.rotation; |
オイラー角との変換
オイラー角からクォータニオンに変換するには、Quaternion.Eulerを使います。
クォータニオンからオイラー角に変換するには、eulerAnglesプロパティを使います。
|
1 2 3 4 5 6 |
// オイラー角 → クォータニオン Quaternion rotation = Quaternion.Euler(30, 45, 60); // クォータニオン → オイラー角 Vector3 euler = rotation.eulerAngles; |
LookRotationによる向き設定
指定した方向を向くクォータニオンを作成するには、Quaternion.LookRotationを使います。
|
1 2 3 4 |
// ターゲットの方向を向く Vector3 direction = target.position - transform.position; transform.rotation = Quaternion.LookRotation(direction); |
Slerpによる滑らかな回転
2つの回転状態の間を滑らかに補間するには、Quaternion.Slerpを使います。
|
1 2 3 4 5 6 7 8 |
// 現在の回転から目標の回転へ滑らかに補間 Quaternion targetRotation = Quaternion.LookRotation(direction); transform.rotation = Quaternion.Slerp( transform.rotation, targetRotation, Time.deltaTime * rotationSpeed ); |
回転の合成
複数の回転を合成するには、掛け算を使います。
|
1 2 3 4 5 |
// Y軸周りに90度回転させた後、X軸周りに30度回転 Quaternion rotationY = Quaternion.Euler(0, 90, 0); Quaternion rotationX = Quaternion.Euler(30, 0, 0); transform.rotation = rotationY * rotationX; // 順番が重要 |
クォータニオンの正規化
クォータニオンは、必ず正規化されている必要があります。
UnityのQuaternion関数は、自動的に正規化してくれますが、手動で計算する場合は注意が必要です。
|
1 2 3 |
// 正規化(Unityの関数は自動で行う) Quaternion normalized = rotation.normalized; |

まとめ

この記事では、クォータニオンとは何かについて見てきました。
重要なポイントをおさらいします。
- クォータニオンは4つの値(X、Y、Z、W)で3D回転を表現する数学的表現
- オイラー角と異なり、ジンバルロックが発生しない
- UnityのTransform.rotationはクォータニオン型で管理されている
- 回転の合成は掛け算で行い、Slerpで滑らかな補間が可能
- ゲーム開発では、数学的な詳細よりも、使い方を理解することが重要
クォータニオンは、3D回転を扱う上で欠かせない技術です。
オイラー角の問題点を解決し、滑らかな回転を実現できます。
Unityの関数を使いながら、徐々に理解を深めていけば、自然と身につきます。
実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。
Unity入門の森では、クォータニオンを含む回転処理を、実際のゲーム実装とともに体系的に学べます。
ぜひチェックしてみてください。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント