3Dオブジェクトを回転させる時、どの方法を使えばいいのか分からない。
オイラー角、回転行列、クォータニオンなど、様々な方法があるけど、それぞれどう使い分けるのか。
そんな悩みを抱えていませんか。
3Dオブジェクトの回転計算には、大きく3つの方法があります。
オイラー角、回転行列、クォータニオンです。
それぞれに特徴があり、場面に応じて使い分けることが重要です。
この記事では、3Dオブジェクトの回転計算の方法と、Unityでの実装例を見ていきましょう。
3D回転の表現方法(ゲーム制作目線)

3D空間での回転を表現する方法には、主に3つあります。
オイラー角は、X軸、Y軸、Z軸の3つの角度で回転を表現する方法です。
直感的で理解しやすいという利点がありますが、ジンバルロックという問題があります。
回転行列は、3×3の行列で回転を表現する方法です。
計算が明確で、複数の回転を組み合わせる際に有効です。
ただし、9個の値が必要で、メモリ使用量が多くなります。
クォータニオンは、4つの値(x, y, z, w)で回転を表現する方法です。
ジンバルロックが起きず、補間が滑らかという利点があります。
Unityでは、内部的にはクォータニオンで回転を管理しています。
各方法の特徴
オイラー角は、人間にとって直感的で、Inspectorで確認しやすいという利点があります。
しかし、ジンバルロックが起きるため、複雑な回転処理には不向きです。
回転行列は、計算が明確で、複数の回転を組み合わせる際に便利です。
しかし、メモリ使用量が多く、補間が難しいという欠点があります。
クォータニオンは、ジンバルロックが起きず、補間が滑らかで、メモリ使用量も少ないという利点があります。
Unityでは、回転処理のほとんどでクォータニオンが使われています。
ゲームでの具体的な使い道

3Dオブジェクトの回転計算が、ゲームでどう使われているかを確認してみましょう。
キャラクターの向き変更
プレイヤーキャラクターが、移動方向を向く時、回転計算が必要です。
移動方向のベクトルから、回転を計算して適用します。
この場面では、クォータニオンを使うことが一般的です。
カメラの回転
FPSカメラやTPSカメラで、マウス入力に応じてカメラを回転させる時、回転計算が必要です。
オイラー角を使うとジンバルロックが起きるため、クォータニオンを使うことが推奨されます。
オブジェクトの回転アニメーション
ドアや宝箱が開く時の回転アニメーションでも、回転計算が必要です。
開始角度から終了角度へ、滑らかに補間します。
この場面では、クォータニオンのSlerpが有効です。
複数の回転の組み合わせ
親オブジェクトと子オブジェクトが、それぞれ回転する時、回転計算が必要です。
親の回転と子の回転を組み合わせて、最終的な回転を計算します。
この場面では、クォータニオンの掛け算が使われます。
- キャラクターの向き変更
- カメラの回転
- オブジェクトの回転アニメーション
- 複数の回転の組み合わせ
- 物理演算での回転
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

3D回転計算の仕組みは、「回転の表現方法と適用方法」という考え方で理解できますね。
オイラー角による回転
オイラー角では、3つの軸の角度で回転を表現します。
回転を適用する時は、各軸ごとに順番に回転させます。
Unityでは、Z→X→Yの順(ZXY順)で回転を適用します。
ただし、回転の順番が重要で、順番が変わると結果も変わります。
回転行列による回転
回転行列は、3×3の行列で回転を表現します。
回転を適用する時は、ベクトルに回転行列を掛け算します。
複数の回転を組み合わせる場合は、回転行列を掛け算すれば、1つの回転行列にまとめられます。
クォータニオンによる回転
クォータニオンは、4つの値で回転を表現します。
回転を適用する時は、クォータニオンを使ってベクトルを回転させます。
複数の回転を組み合わせる場合は、クォータニオンを掛け算すれば、1つのクォータニオンにまとめられます。
回転の補間
回転を補間する時、オイラー角では滑らかに補間できない場合があります。
回転行列でも、補間が難しいです。
クォータニオンでは、Slerpを使うことで、滑らかに補間できます。
- オイラー角は直感的だが、ジンバルロックが起きる
- 回転行列は計算が明確だが、補間が難しい
- クォータニオンはジンバルロックが起きず、補間が滑らか
- Unityでは、できるだけクォータニオンを使うことが推奨される
Unityで実装する際の注意点(代表例)

Unityで3Dオブジェクトの回転計算を実装する場合の注意点を見ていきましょう。
方向ベクトルから回転を計算する方法
移動方向のベクトルから、回転を計算する実装です。
|
1 2 3 4 5 |
// 方向ベクトルから回転を計算 Vector3 direction = (targetPosition - transform.position).normalized; Quaternion rotation = Quaternion.LookRotation(direction); transform.rotation = rotation; |
このコードでは、Quaternion.LookRotationを使うことで、方向ベクトルから回転を計算しています。
オイラー角からクォータニオンへの変換
オイラー角をクォータニオンに変換する実装です。
|
1 2 3 4 5 |
// オイラー角からクォータニオンに変換 Vector3 eulerAngles = new Vector3(30f, 45f, 0f); Quaternion rotation = Quaternion.Euler(eulerAngles); transform.rotation = rotation; |
このコードでは、Quaternion.Eulerを使うことで、オイラー角からクォータニオンに変換しています。
回転行列からクォータニオンへの変換
回転行列をクォータニオンに変換する実装です。
|
1 2 3 4 5 6 7 |
// 回転行列を作成 Matrix4x4 rotationMatrix = Matrix4x4.Rotate(Quaternion.Euler(30f, 45f, 0f)); // 回転行列からクォータニオンに変換 Quaternion rotation = rotationMatrix.rotation; transform.rotation = rotation; |
このコードでは、回転行列からクォータニオンに変換しています。
複数の回転を組み合わせる方法
親オブジェクトと子オブジェクトの回転を組み合わせる実装です。
|
1 2 3 4 5 6 7 8 9 10 |
// 親の回転 Quaternion parentRotation = parentTransform.rotation; // 子のローカル回転 Quaternion childLocalRotation = Quaternion.Euler(0, 45, 0); // 回転を組み合わせ(親の回転 × 子のローカル回転) Quaternion combinedRotation = parentRotation * childLocalRotation; childTransform.rotation = combinedRotation; |
このコードでは、クォータニオンの掛け算を使って、複数の回転を組み合わせています。
回転の補間
回転を滑らかに補間する実装です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class SmoothRotation : MonoBehaviour { public Quaternion targetRotation; public float rotationSpeed = 5f; void Update() { // Slerpで滑らかに回転 transform.rotation = Quaternion.Slerp( transform.rotation, targetRotation, Time.deltaTime * rotationSpeed ); } } |
このコードでは、Quaternion.Slerpを使うことで、滑らかに回転を補間しています。
回転の相対的な計算
現在の回転からの相対的な回転を計算する実装です。
|
1 2 3 4 5 6 7 8 9 |
// 現在の回転 Quaternion currentRotation = transform.rotation; // 相対的な回転(例:Y軸周りに45度回転) Quaternion relativeRotation = Quaternion.Euler(0, 45, 0); // 相対的な回転を適用(現在の回転 × 相対的な回転) transform.rotation = currentRotation * relativeRotation; |
このコードでは、現在の回転に対して、相対的な回転を適用しています。

まとめ

この記事では、3Dオブジェクトの回転計算について見てきました。
重要なポイントをおさらいします。
- 3D回転の表現方法には、オイラー角、回転行列、クォータニオンの3つがある
- オイラー角は直感的だがジンバルロックが起きる、回転行列は計算が明確だが補間が難しい
- クォータニオンはジンバルロックが起きず、補間が滑らかで、Unityで推奨される方法
- 方向ベクトルから回転を計算するにはQuaternion.LookRotationを使う
- 回転を滑らかに補間するにはQuaternion.Slerpを使う
3Dオブジェクトの回転計算は、ゲーム開発で頻繁に使われる重要な技術です。
オイラー角、回転行列、クォータニオンのそれぞれの特徴を理解し、場面に応じて使い分けることが重要です。
Unityでは、できるだけクォータニオンを使うことをおすすめします。
クォータニオンは、ジンバルロックが起きず、補間も滑らかで、Unityの内部でも使われているからです。
まずは、基本的な使い方から覚えていきましょうね。
実際に試してみることで、各方法の違いを実感できるはずです。
数学的な理論だけでなく、実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。
Unity入門の森では、クォータニオンを含む回転処理を、実装しながら体系的に学べます。
ぜひチェックしてみてください。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント