Unityで複数の回転を組み合わせる際、クォータニオンの合成が必要になります。
「複数の回転をどうやって組み合わせるの?」
「掛け算の順番はどうなるの?」
「ローカル回転とワールド回転の違いは?」
そんな疑問を抱えている方に向けて、クォータニオンの合成方法について、初心者でも理解できるように詳しく解説します。
\読むだけで終わらせない!実際にゲームを作って実力をつけよう/
トレンド×入門に最適
Unity ノンフィールドRPG
+スレスパ風JRPG講座
Unity6対応・スマホ化対応の最新カリキュラム。今もっとも人気のデッキ構築型ゲームをJRPGと組み合わせて実装。初心者が最初に選ぶ一本として最適です。
王道アクションに挑戦
Unity 2Dアクションゲーム
の作り方講座(ロックマン風)
ロックマン風の本格横スクロールACTをスマホ化・広告実装まで対応。7ステージ+ラスボスという市販ゲームに近い本格構成で、リリースまで見据えて作れます。
3D入門に最適
ゼルダ風3Dアクションゲーム
の作り方講座
ゼルダの伝説・モンハン・原神のような3Dアクションをスマホ対応で作れる入門講座。初心者でも全16回でしっかり3D開発の基礎を習得できます。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
クォータニオンの合成とは
クォータニオンの合成とは、複数の回転を組み合わせて1つの回転にする技術です。
2つのクォータニオンを掛け算することで、2つの回転を順番に適用した結果の回転を表現できます。
合成の基本概念
クォータニオンの合成は、掛け算で実現されます。
|
1 2 3 4 5 6 |
Quaternion q1 = Quaternion.Euler(0, 45, 0); // Y軸周りに45度 Quaternion q2 = Quaternion.Euler(45, 0, 0); // X軸周りに45度 // 2つの回転を合成(q1の後にq2を適用) Quaternion combined = q2 * q1; |
掛け算の順番が重要で、右側のクォータニオンが先に適用されます。
合成の用途
クォータニオンの合成は、以下のような場面で使われます。
- 複数の回転を順番に適用する
- 現在の回転に追加の回転を加える
- 親子関係の回転を組み合わせる
- 掛け算で複数の回転を組み合わせる
- 掛け算の順番が重要(右側が先に適用される)
- ローカル回転とワールド回転で順番が異なる
- 結合則は成立するが、交換則は成立しない
基本的な合成方法
クォータニオンの基本的な合成方法を見ていきましょう。
2つの回転の合成
|
1 2 3 4 5 6 7 8 9 10 11 12 |
// 回転1:Y軸周りに45度 Quaternion rotation1 = Quaternion.Euler(0, 45, 0); // 回転2:X軸周りに30度 Quaternion rotation2 = Quaternion.Euler(30, 0, 0); // 合成(rotation1の後にrotation2を適用) Quaternion combined = rotation2 * rotation1; // Transformに適用 transform.rotation = combined; |
現在の回転に追加の回転を加える
現在の回転に、追加の回転を加える場合です。
|
1 2 3 4 5 6 7 8 9 |
// 現在の回転 Quaternion currentRotation = transform.rotation; // 追加の回転(ローカル座標系での回転) Quaternion additionalRotation = Quaternion.Euler(0, 10, 0); // Y軸周りに10度 // 現在の回転に追加(ローカル回転) transform.rotation = currentRotation * additionalRotation; |
複数の回転を順番に適用
複数の回転を順番に適用する場合です。
|
1 2 3 4 5 6 7 |
Quaternion rotation1 = Quaternion.Euler(0, 45, 0); Quaternion rotation2 = Quaternion.Euler(45, 0, 0); Quaternion rotation3 = Quaternion.Euler(0, 0, 90); // 順番に適用(右から左へ:rotation1 → rotation2 → rotation3) Quaternion combined = rotation3 * rotation2 * rotation1; |
ローカル回転とワールド回転
クォータニオンの合成では、ローカル回転とワールド回転の違いが重要になります。
ローカル回転
ローカル回転は、オブジェクトの現在の向きを基準にした回転です。
|
1 2 3 4 5 6 7 8 9 |
// 現在の回転 Quaternion currentRotation = transform.rotation; // 追加の回転(ローカル座標系) Quaternion localRotation = Quaternion.Euler(0, 10, 0); // ローカル回転を適用(右側に掛ける) transform.rotation = currentRotation * localRotation; |
右側に掛けることで、オブジェクトのローカル座標系での回転になります。
ワールド回転
ワールド回転は、ワールド座標系を基準にした回転です。
|
1 2 3 4 5 6 7 8 9 |
// 現在の回転 Quaternion currentRotation = transform.rotation; // 追加の回転(ワールド座標系) Quaternion worldRotation = Quaternion.Euler(0, 10, 0); // ワールド回転を適用(左側に掛ける) transform.rotation = worldRotation * currentRotation; |
左側に掛けることで、ワールド座標系での回転になります。
実用的な例
FPSカメラなどで、ローカル回転を使う例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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"); // Y軸周りの回転(ワールド座標系) rotationY += mouseX; Quaternion yRotation = Quaternion.Euler(0, rotationY, 0); // X軸周りの回転(ローカル座標系) rotationX -= mouseY; rotationX = Mathf.Clamp(rotationX, -90f, 90f); Quaternion xRotation = Quaternion.Euler(rotationX, 0, 0); // 合成(Y軸回転の後にX軸回転) transform.rotation = yRotation * xRotation; } } |
実用的な合成パターン
実際のゲーム開発でよく使われる合成パターンを見ていきましょう。
回転の累積
回転を累積させていく場合です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
private Quaternion baseRotation = Quaternion.identity; private float accumulatedYRotation = 0f; void Update() { // 回転を累積 float deltaRotation = Input.GetAxis("Horizontal") * 90f * Time.deltaTime; accumulatedYRotation += deltaRotation; // 基本回転と累積回転を合成 Quaternion additionalRotation = Quaternion.Euler(0, accumulatedYRotation, 0); transform.rotation = baseRotation * additionalRotation; } |
回転のリセット
特定の軸だけ回転をリセットする場合です。
|
1 2 3 4 5 6 7 8 |
void ResetXRotation() { // X軸の回転だけを0にリセット Vector3 euler = transform.rotation.eulerAngles; Quaternion newRotation = Quaternion.Euler(0, euler.y, euler.z); transform.rotation = newRotation; } |
親子関係の回転
親オブジェクトと子オブジェクトの回転を組み合わせる場合です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public Transform parentTransform; public Transform childTransform; void Update() { // 親の回転 Quaternion parentRotation = parentTransform.rotation; // 子のローカル回転 Quaternion localRotation = childTransform.localRotation; // 合成(親の回転に子の回転を適用) // 子のワールド回転 = 親のワールド回転 * 子のローカル回転 childTransform.rotation = parentRotation * localRotation; } |
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 33 34 35 36 37 38 39 40 41 42 |
using UnityEngine; public class RotationCompositionController : MonoBehaviour { [Header("基本回転")] public Vector3 baseRotation = Vector3.zero; [Header("追加回転")] public Vector3 additionalRotation = Vector3.zero; public bool isLocalRotation = true; [Header("回転速度")] public float rotationSpeed = 90f; private Quaternion baseQuat; private Quaternion additionalQuat; void Start() { baseQuat = Quaternion.Euler(baseRotation); } void Update() { // 追加回転を計算 additionalRotation += new Vector3(0, rotationSpeed * Time.deltaTime, 0); additionalQuat = Quaternion.Euler(additionalRotation); // 合成 if (isLocalRotation) { // ローカル回転(右側に掛ける) transform.rotation = baseQuat * additionalQuat; } else { // ワールド回転(左側に掛ける) transform.rotation = additionalQuat * baseQuat; } } } |
- 掛け算の順番が重要(右側が先に適用される)
- ローカル回転は右側、ワールド回転は左側に掛ける
- 交換則は成立しない(q1 * q2 ≠ q2 * q1)
- 結合則は成立する((q1 * q2) * q3 = q1 * (q2 * q3))
クォータニオンの合成の実装手順
※この順番を守らずに作り始めると、だいたい後で全部作り直すことになります。
- STEP1基本的な合成を理解
2つのクォータニオンを掛け算する方法を理解します。掛け算の順番が重要であることを覚えましょう。
- STEP2ローカル回転とワールド回転を理解
ローカル回転とワールド回転の違いを理解します。どちらを使うべきか判断できるようにしましょう。
- STEP3基本的な合成を実装
現在の回転に追加の回転を加えるコードを実装します。右側に掛けるか、左側に掛けるかを意識しましょう。
- STEP4複数の回転を合成
複数の回転を順番に適用するコードを実装します。順番に注意しながら実装しましょう。
- STEP5実践的な活用
FPSカメラなど、実践的な場面で活用します。ローカル回転とワールド回転を使い分けましょう。
よくある問題と解決方法
クォータニオンの合成でよくある問題と、その解決方法を紹介します。
回転の方向が逆になる
掛け算の順番を間違えている可能性があります。
|
1 2 3 4 5 6 |
// ✅ 正しい順番 transform.rotation = currentRotation * additionalRotation; // ローカル回転 // ❌ 間違った順番 transform.rotation = additionalRotation * currentRotation; // ワールド回転 |
意図しない軸で回転する
ローカル回転とワールド回転を間違えている可能性があります。
|
1 2 3 4 5 6 |
// ローカル回転(オブジェクトの現在の向きを基準) transform.rotation = transform.rotation * localRotation; // ワールド回転(ワールド座標系を基準) transform.rotation = worldRotation * transform.rotation; |
回転が累積しない
毎回新しい回転を設定している可能性があります。
|
1 2 3 4 5 6 |
// ❌ 累積しない transform.rotation = Quaternion.Euler(0, angle, 0); // ✅ 累積する transform.rotation = transform.rotation * Quaternion.Euler(0, deltaAngle, 0); |
- 回転の方向が逆 → 掛け算の順番を確認する
- 意図しない軸で回転 → ローカル回転とワールド回転を確認する
- 回転が累積しない → 現在の回転に追加する形にする
- 回転がおかしい → 掛け算の順番を再確認する
クォータニオンの合成の学習を深めるには
合成の基礎を理解した後は、さらに深く学んでいくことが大切です。
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開発の壁を一気に突破!スマホで動くオリジナルゲームを完成させよう!
まとめ

この記事では、クォータニオンの合成方法について解説しました。
クォータニオンの合成は、掛け算で実現され、掛け算の順番が重要です。
ローカル回転は右側に、ワールド回転は左側に掛けることで、適切な回転が実現できます。
「合成って難しそう💧」と感じる方もいるかもしれませんが、基本的なルールを理解すれば実装できます。
まずは基本的な合成から始めて、徐々に実践的な使い方に挑戦していきましょう。
- クォータニオンの合成は掛け算で実現
- 掛け算の順番が重要(右側が先に適用される)
- ローカル回転は右側、ワールド回転は左側に掛ける
- 交換則は成立しないが、結合則は成立する
- 複数の回転を順番に適用できる
まずは基本的な合成から始めて、徐々に実践的な使い方に挑戦していきましょう。
Unity入門の森では、クォータニオンの合成の基礎から応用まで、実践的な知識を体系的に学べる環境が整っています。
疑問があれば、ぜひ活用してみてください。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。





コメント