Unityでオブジェクトを回転させるとき、Transform.rotationはクォータニオン型だけど、Inspectorで見るとオイラー角で表示されている。
クォータニオンとオイラー角は、どうやって変換すればいいのか。
実際、Unityでは簡単に変換できますね。
クォータニオンとオイラー角の変換は、Quaternion.EulerとeulerAnglesプロパティを使うことで実現できます。
この記事では、クォータニオンとオイラー角の相互変換の方法を、Unity実装例とともに解説します。
- クォータニオンとオイラー角の変換方法が分からない…
- UnityのInspectorではオイラー角で表示されるが、コードではクォータニオンを使っている。
- 相互変換のタイミングや方法を知りたい。
✨ この記事でわかること
- クォータニオンとオイラー角の相互変換の方法
- Unityでの変換関数の使い方
- 変換時の注意点とタイミング
- 実装例とコードサンプル
- 初心者でも理解できる変換の考え方
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます
クォータニオンとオイラー角の変換とは何か(ゲーム制作目線)

クォータニオンとオイラー角は、どちらも3D回転を表現する方法ですが、形式が異なります。
オイラー角は3つの値(X、Y、Z)で表現し、直感的に理解しやすいです。
一方、クォータニオンは4つの値(X、Y、Z、W)で表現し、ジンバルロックを回避できます。
Unityでは、内部ではクォータニオンで管理し、表示ではオイラー角に変換しています。
変換すれば、それぞれのメリットを活かせます。
ゲームでの具体的な使い道

クォータニオンとオイラー角の変換が、ゲームでどう使われているか確認してみましょう。
Inspectorでの角度設定
UnityのInspectorでは、回転をオイラー角で設定できます。
内部では自動的にクォータニオンに変換されて、Transform.rotationに保存されます。
アニメーションでの回転設定
アニメーションクリップで回転を設定する場合、オイラー角で設定することが多いです。
Unityが自動的にクォータニオンに変換して、補間処理を行います。
外部データからの回転読み込み
外部のデータファイル(JSON、CSVなど)から回転データを読み込む場合、オイラー角で保存されていることがあります。
その場合、Quaternion.Eulerでクォータニオンに変換します。
デバッグでの角度確認
デバッグ時に回転角度を確認する場合、オイラー角の方が直感的です。
eulerAnglesプロパティで、クォータニオンをオイラー角に変換して確認します。
- Inspectorでの角度設定
- アニメーションでの回転設定
- 外部データからの回転読み込み
- デバッグでの角度確認
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

クォータニオンとオイラー角の変換は、数学的な計算で相互に変換できますね。
オイラー角からクォータニオンへの変換
オイラー角(X、Y、Z)からクォータニオンに変換する場合、各軸の回転を表すクォータニオンを作成し、掛け算で合成します。
UnityのQuaternion.Euler関数は、この計算を自動で行ってくれます。
クォータニオンからオイラー角への変換
クォータニオンからオイラー角に変換する場合、クォータニオンの各成分からオイラー角を計算します。
UnityのeulerAnglesプロパティは、この計算を自動で行ってくれます。
変換時の注意点
オイラー角からクォータニオンへの変換は、一意に決まります。
一方、クォータニオンからオイラー角への変換は、同じ回転を表すオイラー角が複数存在する可能性があります。
例えば、180度回転と-180度回転は、同じ回転を表します。
- オイラー角 → クォータニオン:Quaternion.Eulerを使う
- クォータニオン → オイラー角:eulerAnglesプロパティを使う
- 変換時の計算は、Unityの関数が自動で行ってくれる
- クォータニオンからオイラー角への変換は、一意でない場合がある
Unityで実装する際の注意点(代表例)

Unityでクォータニオンとオイラー角を変換する場合の注意点を見ていきましょう。
オイラー角からクォータニオンへの変換
Quaternion.Euler関数を使って、オイラー角からクォータニオンに変換します。
|
1 2 3 4 5 6 7 8 9 10 |
// Vector3で指定する場合 Vector3 euler = new Vector3(30, 45, 60); Quaternion rotation = Quaternion.Euler(euler); // 個別に指定する場合 Quaternion rotation = Quaternion.Euler(30, 45, 60); // Transform.rotationに直接設定 transform.rotation = Quaternion.Euler(30, 45, 60); |
クォータニオンからオイラー角への変換
eulerAnglesプロパティを使って、クォータニオンからオイラー角に変換します。
|
1 2 3 4 5 6 7 8 9 |
// クォータニオンからオイラー角を取得 Quaternion rotation = transform.rotation; Vector3 euler = rotation.eulerAngles; // 個別の軸の角度を取得 float x = rotation.eulerAngles.x; float y = rotation.eulerAngles.y; float z = rotation.eulerAngles.z; |
外部データからの読み込み
外部データからオイラー角を読み込んで、クォータニオンに変換する例です。
|
1 2 3 4 5 6 7 8 |
// JSONなどからオイラー角を読み込む例 float eulerX = data.rotationX; float eulerY = data.rotationY; float eulerZ = data.rotationZ; // クォータニオンに変換 transform.rotation = Quaternion.Euler(eulerX, eulerY, eulerZ); |
オイラー角での回転操作
オイラー角で回転を操作する場合の例です。
|
1 2 3 4 5 6 7 8 9 |
// 現在のオイラー角を取得 Vector3 euler = transform.rotation.eulerAngles; // Y軸周りに90度回転 euler.y += 90; // クォータニオンに変換して設定 transform.rotation = Quaternion.Euler(euler); |
補間処理での変換
オイラー角で補間する場合の注意点です。
|
1 2 3 4 5 6 7 8 9 10 11 |
// ❌ オイラー角で直接補間(非推奨) Vector3 startEuler = startRotation.eulerAngles; Vector3 endEuler = endRotation.eulerAngles; Vector3 lerpedEuler = Vector3.Lerp(startEuler, endEuler, t); transform.rotation = Quaternion.Euler(lerpedEuler); // ✅ クォータニオンで補間(推奨) Quaternion startQuat = startRotation; Quaternion endQuat = endRotation; transform.rotation = Quaternion.Slerp(startQuat, endQuat, t); |
角度の範囲について
eulerAnglesプロパティは、0〜360度の範囲で値を返します。
負の角度が必要な場合は、-180〜180度の範囲に変換する必要があります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 0〜360度から-180〜180度に変換する関数 float NormalizeAngle(float angle) { while (angle > 180) angle -= 360; while (angle < -180) angle += 360; return angle; } Vector3 euler = transform.rotation.eulerAngles; euler.x = NormalizeAngle(euler.x); euler.y = NormalizeAngle(euler.y); euler.z = NormalizeAngle(euler.z); |

まとめ

この記事では、クォータニオンとオイラー角の変換について見てきました。
重要なポイントをおさらいします。
- オイラー角 → クォータニオン:Quaternion.Euler関数を使う
- クォータニオン → オイラー角:eulerAnglesプロパティを使う
- Unityでは内部でクォータニオン、表示ではオイラー角を使っている
- 補間処理はクォータニオンで行う方が滑らかで自然
- 変換のタイミングと方法を理解すれば、適切に使い分けられる
クォータニオンとオイラー角の変換は、Unityを使っていると頻繁に必要になります。
どちらを使うべきかは、用途によって異なります。
変換のタイミングと方法を理解すれば、適切に使い分けられるようになります。
実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。
Unity入門の森では、クォータニオンを含むベクトルと行列を、実際のゲーム実装とともに体系的に学べます。
ぜひチェックしてみてください。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント