オブジェクトの移動・回転・拡大を、統一的に扱いたい。
複数の変換を組み合わせたい。
そんな場面で使われるのが、変換行列です。
変換行列は、移動・回転・拡大を統合して扱える4×4行列です。
1つの行列で、複数の変換を表現できます。
これにより、変換の合成や、座標変換が簡単になります。
この記事では、変換行列をゲームで使う理由について、Unity実装例とともに解説します。
- 変換行列とは何か、よく分からない…
- 移動・回転・拡大を統一的に扱いたい。
- 変換の合成方法が理解できていない。
✨ この記事でわかること
- 変換行列の基本概念
- 移動・回転・拡大の統合的表現
- 変換の合成方法
- Unityでの実装方法
- 初心者でも理解できる変換行列の考え方
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます
変換行列とは何か(ゲーム制作目線)

変換行列は、移動・回転・拡大を統合して表現する4×4行列です。
1つの行列で、複数の変換を表現できます。
変換行列の特徴は、変換の合成が容易であることです。
複数の変換行列を掛け合わせることで、1つの変換行列にまとめられます。
これにより、移動→回転→拡大の順に変換する場合、行列を掛け算するだけで計算できます。
Unityでは、Matrix4x4構造体で、変換行列を扱えます。
ゲームでの具体的な使い道

変換行列が、ゲームでどう使われているか確認してみましょう。
オブジェクトの変換
オブジェクトの位置、回転、拡大を、変換行列で表現します。
1つの行列で、すべての変換を管理できます。
座標変換
ワールド座標とローカル座標の変換に使われます。
親子関係のあるオブジェクト間での座標変換などに使われます。
カメラの変換
カメラのビュー行列やプロジェクション行列などに使われます。
3D空間を2D画面に投影する際に必要です。
スキニング
3Dモデルのスキニング処理に使われます。
ボーンの変換を行列で表現します。
- オブジェクトの変換(位置、回転、拡大)
- 座標変換(ワールド・ローカル座標)
- カメラの変換(ビュー・プロジェクション行列)
- スキニング(ボーンの変換)
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

変換行列は、「移動行列 → 回転行列 → 拡大行列 → 合成された変換行列」という流れで実現できます。
移動行列
移動だけを行う4×4行列です。
右端の列に、移動量を設定します。
回転行列
回転だけを行う4×4行列です。
左上の3×3部分に、回転を表現します。
拡大行列
拡大だけを行う4×4行列です。
対角成分に、拡大率を設定します。
合成された変換行列
複数の変換行列を掛け合わせて、1つの変換行列にします。
順番が重要で、異なる順番で掛けると、結果が変わります。
- 変換行列は、移動・回転・拡大を統合して表現する4×4行列
- 変換の合成は、行列の積で計算する
- 変換の順番が重要で、結果が変わる
- UnityのMatrix4x4構造体で簡単に扱える
Unityで実装する際の注意点(代表例)

Unityで変換行列を扱う場合の注意点を見ていきましょう。
変換行列の作成
UnityのMatrix4x4構造体で、変換行列を作成します。
|
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 TransformationMatrixExample : MonoBehaviour { void Start() { // 移動行列 Matrix4x4 translationMatrix = Matrix4x4.Translate(new Vector3(5, 0, 0)); // 回転行列 Matrix4x4 rotationMatrix = Matrix4x4.Rotate(Quaternion.Euler(0, 45, 0)); // 拡大行列 Matrix4x4 scaleMatrix = Matrix4x4.Scale(new Vector3(2, 2, 2)); // 変換を合成(移動→回転→拡大) Matrix4x4 combinedMatrix = translationMatrix * rotationMatrix * scaleMatrix; // 座標を変換 Vector3 originalPosition = new Vector3(1, 0, 0); Vector3 transformedPosition = combinedMatrix.MultiplyPoint3x4(originalPosition); Debug.Log($"変換前: {originalPosition}, 変換後: {transformedPosition}"); } } |
Transformからの変換行列取得
Transformコンポーネントから、変換行列を取得します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class TransformToMatrix : MonoBehaviour { public Transform target; void Update() { // ローカル→ワールド変換行列 Matrix4x4 localToWorldMatrix = target.localToWorldMatrix; // ワールド→ローカル変換行列 Matrix4x4 worldToLocalMatrix = target.worldToLocalMatrix; // 座標を変換 Vector3 localPos = new Vector3(1, 0, 0); Vector3 worldPos = localToWorldMatrix.MultiplyPoint3x4(localPos); } } |
変換の順番の重要性
変換の順番によって、結果が変わることを示します。
|
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 |
public class TransformationOrder : MonoBehaviour { void Start() { Vector3 position = new Vector3(5, 0, 0); Quaternion rotation = Quaternion.Euler(0, 45, 0); Vector3 scale = new Vector3(2, 2, 2); // 移動→回転→拡大の順 Matrix4x4 matrix1 = Matrix4x4.Translate(position) * Matrix4x4.Rotate(rotation) * Matrix4x4.Scale(scale); // 回転→移動→拡大の順 Matrix4x4 matrix2 = Matrix4x4.Rotate(rotation) * Matrix4x4.Translate(position) * Matrix4x4.Scale(scale); Vector3 original = new Vector3(1, 0, 0); Vector3 result1 = matrix1.MultiplyPoint3x4(original); Vector3 result2 = matrix2.MultiplyPoint3x4(original); Debug.Log($"順番1: {result1}, 順番2: {result2}"); // 異なる結果 } } |

まとめ

この記事では、変換行列をゲームで使う理由について見てきました。
重要なポイントをおさらいします。
- 変換行列は、移動・回転・拡大を統合して表現する4×4行列
- 変換の合成は、行列の積で計算する
- 変換の順番が重要で、結果が変わる
- UnityのMatrix4x4構造体で簡単に扱える
- 座標変換やオブジェクトの変換などに活用できる
変換行列は、ゲーム開発で重要な技術です。
移動・回転・拡大を統合して扱うことで、様々な変換を簡単に実装できます。
変換の合成や座標変換など、実用的な場面で活用できますね。
実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。
Unity入門の森では、変換行列を含むベクトルと行列を、実際のゲーム実装とともに体系的に学べます。
ぜひチェックしてみてください。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント