オブジェクトをY軸周りに90度回転させた後、X軸周りに30度回転させたい。
複数の回転を組み合わせるには、どうすればいいのか。
実は、クォータニオンは掛け算で合成できますね。
回転の順番が重要で、順番が変わると結果も変わります。
この記事では、クォータニオンの合成の仕組みを、Unity実装例とともに解説します。
- 複数の回転を組み合わせる方法が分からない…
- 回転の順番が結果に影響するのか理解できていない。
- クォータニオンの合成の計算方法を知りたい。
✨ この記事でわかること
- クォータニオンの合成の基本となる掛け算
- 回転の順番が結果に与える影響
- 複数の回転を組み合わせる実装方法
- Unityでの合成処理のコード例
- 初心者でも理解できる合成の考え方
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます
クォータニオン合成とは何か(ゲーム制作目線)

クォータニオンの合成は、複数の回転を1つのクォータニオンにまとめる処理です。
2つのクォータニオンを掛け算すれば、2つの回転を順番に適用した結果を得られます。
クォータニオンの掛け算は、通常の数値の掛け算とは異なり、交換法則が成り立ちません。
つまり、q1 * q2 と q2 * q1 は、一般的に異なる結果になります。
これが、回転の順番が重要である理由です。
ゲームでの具体的な使い道

クォータニオンの合成が、ゲームでどう使われているか確認してみましょう。
複数軸での回転
オブジェクトを複数の軸で回転させる場合、各軸の回転を表すクォータニオンを作成し、掛け算で合成します。
例えば、Y軸周りに90度、次にX軸周りに30度回転させる場合、2つのクォータニオンを合成します。
親子関係での回転
親オブジェクトと子オブジェクトがそれぞれ回転している場合、子オブジェクトの最終的な回転は、親の回転と子の回転を合成したものになります。
カメラの回転制御
FPSゲームなどで、カメラを水平方向と垂直方向に回転させる場合、それぞれの回転を表すクォータニオンを合成します。
アニメーションでの回転補間
複数のキーフレームの回転を補間する場合、各キーフレームのクォータニオンを合成して、中間の回転を計算します。
- 複数軸での回転処理
- 親子関係での回転計算
- カメラの回転制御
- アニメーションでの回転補間
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

クォータニオンの合成は、掛け算で行いますが、順番が重要です。
基本的な合成方法
2つのクォータニオン q1 と q2 を合成する場合、q1 * q2 とすると、まずq1の回転、次にq2の回転が適用されます。
Unityでは、クォータニオンの掛け算(*)で簡単に合成できますね。
回転の順番の重要性
q1 * q2 と q2 * q1 は、一般的に異なる結果になります。
例えば、Y軸周りに90度回転させてからX軸周りに30度回転させるのと、X軸周りに30度回転させてからY軸周りに90度回転させるのでは、結果が異なります。
複数の回転の合成
3つ以上の回転を合成する場合、順番に掛け算します。
q1 * q2 * q3 とすると、q1、q2、q3の順番に回転が適用されます。
ローカル回転とワールド回転
ローカル空間での回転と、ワールド空間での回転は、合成の順番が異なります。
ローカル回転を適用してからワールド回転を適用する場合と、その逆の場合では、結果が異なります。
- クォータニオンの合成は掛け算(*)で行う
- 回転の順番が重要で、q1 * q2 と q2 * q1 は異なる結果になる
- 複数の回転を合成する場合、順番に掛け算する
- ローカル回転とワールド回転では、合成の順番が異なる
Unityで実装する際の注意点(代表例)

Unityでクォータニオンを合成する場合の注意点を見ていきましょう。
基本的な合成方法
2つのクォータニオンを掛け算で合成します。
|
1 2 3 4 5 6 7 8 9 10 |
// Y軸周りに90度回転 Quaternion rotationY = Quaternion.Euler(0, 90, 0); // X軸周りに30度回転 Quaternion rotationX = Quaternion.Euler(30, 0, 0); // 合成(まずY軸、次にX軸) Quaternion combined = rotationY * rotationX; transform.rotation = combined; |
回転の順番の違い
回転の順番が変わると、結果も変わることを確認する例です。
|
1 2 3 4 5 6 7 8 9 10 11 |
Quaternion rotationY = Quaternion.Euler(0, 90, 0); Quaternion rotationX = Quaternion.Euler(30, 0, 0); // 順番1:Y軸 → X軸 Quaternion result1 = rotationY * rotationX; // 順番2:X軸 → Y軸 Quaternion result2 = rotationX * rotationY; // result1とresult2は異なる回転になる |
複数の回転の合成
3つ以上の回転を合成する例です。
|
1 2 3 4 5 6 7 8 9 |
// 3つの回転を合成 Quaternion rotationX = Quaternion.Euler(30, 0, 0); Quaternion rotationY = Quaternion.Euler(0, 90, 0); Quaternion rotationZ = Quaternion.Euler(0, 0, 45); // X → Y → Zの順番で回転 Quaternion combined = rotationX * rotationY * rotationZ; transform.rotation = combined; |
親子関係での回転合成
親オブジェクトと子オブジェクトの回転を合成する例です。
|
1 2 3 4 5 6 7 |
// 親の回転と子の回転を合成 Quaternion parentRotation = parent.transform.rotation; Quaternion localRotation = Quaternion.Euler(0, 90, 0); // 親の回転を適用してから、子の回転を適用 child.transform.rotation = parentRotation * localRotation; |
現在の回転に追加で回転
現在の回転に、追加で回転を適用する例です。
|
1 2 3 4 5 6 7 8 9 |
// 現在の回転を取得 Quaternion currentRotation = transform.rotation; // 追加で回転させる Quaternion additionalRotation = Quaternion.Euler(0, 90, 0); // 現在の回転に追加の回転を合成 transform.rotation = currentRotation * additionalRotation; |
回転の順番の覚え方
q1 * q2 の場合、まずq1、次にq2が適用されます。
「左から右に適用される」と覚えると、分かりやすいです。
|
1 2 3 |
// 左(q1)→ 右(q2)の順番で適用される Quaternion result = q1 * q2; |

まとめ

この記事では、クォータニオンの合成について見てきました。
重要なポイントをおさらいします。
- クォータニオンの合成は掛け算(*)で行う
- 回転の順番が重要で、q1 * q2 と q2 * q1 は異なる結果になる
- 複数の回転を合成する場合、順番に掛け算する
- 親子関係での回転や、現在の回転に追加で回転する場合にも使える
- 「左から右に適用される」と覚えると、順番が理解しやすい
クォータニオンの合成は、複数の回転を組み合わせる上で欠かせない技術です。
回転の順番が重要であることを理解すれば、意図した通りの回転を実現できます。
実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。
Unity入門の森では、クォータニオンを含む回転処理を、実際のゲーム実装とともに体系的に学べます。
ぜひチェックしてみてください。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント