Unityで回転を扱う際、クォータニオンとオイラー角の変換が必要になることがよくあります。
「どうやって変換するの?」
「変換時に気をつけることは?」
「いつ変換を使うの?」
そんな疑問を抱えている方に向けて、クォータニオンとオイラー角の変換方法について、初心者でも理解できるように詳しく解説します。
\読むだけで終わらせない!実際にゲームを作って実力をつけよう/
トレンド×入門に最適
Unity ノンフィールドRPG
+スレスパ風JRPG講座
Unity6対応・スマホ化対応の最新カリキュラム。今もっとも人気のデッキ構築型ゲームをJRPGと組み合わせて実装。初心者が最初に選ぶ一本として最適です。
王道アクションに挑戦
Unity 2Dアクションゲーム
の作り方講座(ロックマン風)
ロックマン風の本格横スクロールACTをスマホ化・広告実装まで対応。7ステージ+ラスボスという市販ゲームに近い本格構成で、リリースまで見据えて作れます。
3D入門に最適
ゼルダ風3Dアクションゲーム
の作り方講座
ゼルダの伝説・モンハン・原神のような3Dアクションをスマホ対応で作れる入門講座。初心者でも全16回でしっかり3D開発の基礎を習得できます。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
クォータニオンとオイラー角の関係
Unityでは、回転は内部的にクォータニオンで管理されていますが、Inspector上ではオイラー角で表示されています。
これらを相互に変換することで、使いやすい形式で回転を扱えます。
なぜ変換が必要なのか
クォータニオンとオイラー角には、それぞれ特徴があります。
- オイラー角:直感的で分かりやすいが、ジンバルロックの問題がある
- クォータニオン:ジンバルロックを回避できるが、直感的でない
一般的には、オイラー角で角度を指定し、クォータニオンに変換して実際の回転に使用する方法が取られます。
- オイラー角からクォータニオンへ:Quaternion.Euler()
- クォータニオンからオイラー角へ:quaternion.eulerAngles
- 変換は不可逆的(元の値に戻らない場合がある)
- Unityの内部ではクォータニオンで管理されている
オイラー角からクォータニオンへの変換
オイラー角からクォータニオンへ変換する方法を見ていきましょう。
Quaternion.Eulerの使い方
Quaternion.Eulerを使えば、オイラー角からクォータニオンを作成できます。
|
1 2 3 4 5 6 7 8 9 10 |
// Vector3でオイラー角を指定 Vector3 eulerAngles = new Vector3(45, 90, 0); Quaternion rotation = Quaternion.Euler(eulerAngles); // 個別の値で指定 Quaternion rotation = Quaternion.Euler(45f, 90f, 0f); // Transformに適用 transform.rotation = Quaternion.Euler(45, 90, 0); |
実用的な使用例
FPSカメラなどで、オイラー角で角度を管理し、クォータニオンに変換する例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class FPSCameraController : MonoBehaviour { private float rotationX = 0f; private float rotationY = 0f; void Update() { float mouseX = Input.GetAxis("Mouse X"); float mouseY = Input.GetAxis("Mouse Y"); // オイラー角で角度を管理 rotationY += mouseX; rotationX -= mouseY; rotationX = Mathf.Clamp(rotationX, -90f, 90f); // クォータニオンに変換して適用 transform.rotation = Quaternion.Euler(rotationX, rotationY, 0f); } } |
Transform.eulerAnglesとの違い
Transform.eulerAnglesは、クォータニオンをオイラー角に変換して設定・取得するプロパティです。
|
1 2 3 4 5 6 7 8 |
// オイラー角で設定 transform.eulerAngles = new Vector3(45, 90, 0); // 内部的には Quaternion.Euler(45, 90, 0) に変換される // オイラー角を取得 Vector3 euler = transform.eulerAngles; // 内部的には transform.rotation.eulerAngles が呼ばれる |
クォータニオンからオイラー角への変換
クォータニオンからオイラー角へ変換する方法を見ていきましょう。
Quaternion.eulerAnglesの使い方
Quaternion.eulerAnglesプロパティを使えば、クォータニオンからオイラー角を取得できます。
|
1 2 3 4 5 6 7 8 9 10 |
Quaternion rotation = transform.rotation; // クォータニオンからオイラー角へ変換 Vector3 eulerAngles = 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 9 10 11 12 13 14 15 |
public class RotationDisplay : MonoBehaviour { void Update() { // 現在の回転をオイラー角で取得 Vector3 euler = transform.rotation.eulerAngles; // ログに表示 Debug.Log($"Rotation: X={euler.x}, Y={euler.y}, Z={euler.z}"); // UIなどに表示する場合 // rotationText.text = $"X: {euler.x:F1}, Y: {euler.y:F1}, Z: {euler.z:F1}"; } } |
角度の範囲に注意
オイラー角は、0〜360度の範囲で返されます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Vector3 euler = transform.rotation.eulerAngles; // euler.x, euler.y, euler.z は 0〜360度の範囲 // -180〜180度の範囲に変換したい場合 float normalizedX = NormalizeAngle(euler.x); float normalizedY = NormalizeAngle(euler.y); float normalizedZ = NormalizeAngle(euler.z); float NormalizeAngle(float angle) { if (angle > 180f) return angle - 360f; return angle; } |
変換時の注意点
クォータニオンとオイラー角の変換には、いくつかの注意点があります。
変換は不可逆的
オイラー角からクォータニオンに変換して、再度オイラー角に戻すと、元の値と異なる場合があります。
|
1 2 3 4 5 6 7 8 |
Vector3 originalEuler = new Vector3(45, 90, 180); Quaternion q = Quaternion.Euler(originalEuler); Vector3 convertedEuler = q.eulerAngles; // originalEuler と convertedEuler は異なる場合がある // 例:originalEuler = (45, 90, 180) // convertedEuler = (45, 270, 0) になることがある |
これは、同じ回転を表現するオイラー角の組み合わせが複数あるためです。
ジンバルロックの問題
オイラー角で特定の角度(90度など)に設定すると、ジンバルロックが発生する可能性があります。
クォータニオンに変換すれば回避できますが、再度オイラー角に戻すと問題が復活する可能性があります。
補間時の注意
オイラー角で補間すると、意図しない回転が発生する可能性があります。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
// ❌ オイラー角で補間(問題がある可能性) Vector3 startEuler = new Vector3(0, 0, 0); Vector3 endEuler = new Vector3(0, 0, 270); Vector3 currentEuler = Vector3.Lerp(startEuler, endEuler, 0.5f); // 270度ではなく、90度の方向に回転する可能性がある // ✅ クォータニオンで補間(推奨) Quaternion startQ = Quaternion.Euler(0, 0, 0); Quaternion endQ = Quaternion.Euler(0, 0, 270); Quaternion currentQ = Quaternion.Slerp(startQ, endQ, 0.5f); // 正しい方向に回転する |
- 変換は不可逆的(元の値に戻らない場合がある)
- オイラー角の補間は避ける(クォータニオンで補間する)
- 角度の範囲(0〜360度)に注意する
- ジンバルロックを考慮する
Unityでの実装例(C#コード)
Unityでクォータニオンとオイラー角の変換を実装する具体的な例を見ていきましょう。
回転制御クラス
|
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 |
using UnityEngine; public class RotationController : MonoBehaviour { [Header("回転設定")] public Vector3 targetEulerAngles = new Vector3(0, 90, 0); public float rotationSpeed = 5f; [Header("表示用")] public bool showCurrentEuler = true; void Update() { // オイラー角からクォータニオンへ変換 Quaternion targetRotation = Quaternion.Euler(targetEulerAngles); // 滑らかに回転 transform.rotation = Quaternion.Slerp( transform.rotation, targetRotation, rotationSpeed * Time.deltaTime ); // 現在の回転をオイラー角で表示 if (showCurrentEuler) { Vector3 currentEuler = transform.rotation.eulerAngles; Debug.Log($"Current Rotation: {currentEuler}"); } } } |
角度の正規化ユーティリティ
|
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 |
using UnityEngine; public static class EulerAngleUtility { // 0〜360度を-180〜180度に変換 public static Vector3 NormalizeEulerAngles(Vector3 euler) { return new Vector3( NormalizeAngle(euler.x), NormalizeAngle(euler.y), NormalizeAngle(euler.z) ); } private static float NormalizeAngle(float angle) { angle %= 360f; if (angle > 180f) return angle - 360f; if (angle < -180f) return angle + 360f; return angle; } // 2つのオイラー角の差分を計算 public static Vector3 EulerAngleDifference(Vector3 from, Vector3 to) { Vector3 diff = to - from; return NormalizeEulerAngles(diff); } } |
クォータニオンとオイラー角の変換の実装手順
※この順番を守らずに作り始めると、だいたい後で全部作り直すことになります。
- STEP1変換方法を理解
Quaternion.Euler()とQuaternion.eulerAnglesの使い方を理解します。基本的な変換方法を確認しましょう。
- STEP2オイラー角からクォータニオンへ
Quaternion.Euler()を使って、オイラー角からクォータニオンを作成します。実際のコードで動作を確認しましょう。
- STEP3クォータニオンからオイラー角へ
Quaternion.eulerAnglesを使って、クォータニオンからオイラー角を取得します。角度の範囲(0〜360度)に注意しましょう。
- STEP4注意点を理解
変換が不可逆的であることを理解します。補間はクォータニオンで行うことを覚えましょう。
- STEP5実践的な活用
FPSカメラなど、実践的な場面で活用します。オイラー角で管理し、クォータニオンに変換するパターンを実装しましょう。
よくある問題と解決方法
クォータニオンとオイラー角の変換でよくある問題と、その解決方法を紹介します。
変換後の値が元と異なる
変換は不可逆的であるため、元の値と異なる場合があります。
|
1 2 3 4 5 |
// 同じ回転を表現するオイラー角の組み合わせが複数あるため // この問題は避けられない // 必要に応じて、角度を正規化して扱う Vector3 normalized = EulerAngleUtility.NormalizeEulerAngles(eulerAngles); |
補間時に意図しない回転が発生
オイラー角で補間するのではなく、クォータニオンで補間します。
|
1 2 3 4 5 6 7 8 |
// ✅ クォータニオンで補間(推奨) Quaternion startQ = Quaternion.Euler(startEuler); Quaternion endQ = Quaternion.Euler(endEuler); Quaternion currentQ = Quaternion.Slerp(startQ, endQ, t); // ❌ オイラー角で補間(非推奨) Vector3 currentEuler = Vector3.Lerp(startEuler, endEuler, t); |
角度の範囲が0〜360度
オイラー角は0〜360度の範囲で返されるため、-180〜180度に変換したい場合は正規化します。
|
1 2 |
Vector3 normalized = EulerAngleUtility.NormalizeEulerAngles(eulerAngles); |
- 値が元と異なる → 変換は不可逆的であることを理解する
- 補間で問題が発生 → クォータニオンで補間する
- 角度の範囲がおかしい → 正規化して-180〜180度に変換する
- ジンバルロックが発生 → クォータニオンを使用する
クォータニオンとオイラー角の変換の学習を深めるには
変換の基礎を理解した後は、さらに深く学んでいくことが大切です。
Unity入門の森では、ゲーム開発に必要な数学の知識を体系的に学べる環境が整っています。
特に、永久会員チケットでは、クォータニオンやオイラー角など、回転に関する知識を幅広くカバーしています。
また、FPSゲーム講座(弓矢3D)では、実際にゲームを作りながら、変換の実践的な使い方を身につけられます。
回転の基礎から応用まで、実際のコードと紐付けて学べるので、理解が深まりやすいはずです。
- オイラー角からクォータニオンへの変換方法
- クォータニオンからオイラー角への変換方法
- 変換時の注意点(不可逆性など)
- Unityでの実装例(C#コード)
- よくある問題と解決方法
記事を読んで「作ってみたい!」と思ったら!人気ゲームを題材にした講座で実力をつけよう
知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを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開発の壁を一気に突破!スマホで動くオリジナルゲームを完成させよう!
まとめ

この記事では、クォータニオンとオイラー角の変換方法について解説しました。
Quaternion.Euler()でオイラー角からクォータニオンへ、Quaternion.eulerAnglesでクォータニオンからオイラー角へ変換できます。
変換は不可逆的であることに注意し、補間はクォータニオンで行うことが重要です。
「変換って難しそう💧」と感じる方もいるかもしれませんが、基本的な方法を理解すれば実装できます。
まずは基本的な変換方法から始めて、徐々に実践的な使い方に挑戦していきましょう。
- Quaternion.Euler()でオイラー角からクォータニオンへ変換
- Quaternion.eulerAnglesでクォータニオンからオイラー角へ変換
- 変換は不可逆的(元の値に戻らない場合がある)
- 補間はオイラー角ではなくクォータニオンで行う
- 角度の範囲(0〜360度)に注意する
まずは基本的な変換方法から始めて、徐々に実践的な使い方に挑戦していきましょう。
Unity入門の森では、クォータニオンとオイラー角の変換の基礎から応用まで、実践的な知識を体系的に学べる環境が整っています。
疑問があれば、ぜひ活用してみてください。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。





コメント