ゲーム開発で当たり判定を実装しようとすると、様々な方法があることに気づきます。
「どの判定方法を使えばいいの?」
「AABBって何?」
「どうやって実装するの?」
そんな疑問を抱えている方に向けて、最も基本的な衝突判定手法であるAABB(Axis-Aligned Bounding Box)について、初心者でも理解できるように解説します。
\読むだけで終わらせない!実際にゲームを作って実力をつけよう/
トレンド×入門に最適
Unity ノンフィールドRPG
+スレスパ風JRPG講座
Unity6対応・スマホ化対応の最新カリキュラム。今もっとも人気のデッキ構築型ゲームをJRPGと組み合わせて実装。初心者が最初に選ぶ一本として最適です。
王道アクションに挑戦
Unity 2Dアクションゲーム
の作り方講座(ロックマン風)
ロックマン風の本格横スクロールACTをスマホ化・広告実装まで対応。7ステージ+ラスボスという市販ゲームに近い本格構成で、リリースまで見据えて作れます。
3D入門に最適
ゼルダ風3Dアクションゲーム
の作り方講座
ゼルダの伝説・モンハン・原神のような3Dアクションをスマホ対応で作れる入門講座。初心者でも全16回でしっかり3D開発の基礎を習得できます。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
AABBとは何か

AABB(Axis-Aligned Bounding Box)は、軸に平行な矩形(長方形・直方体)を使って行う衝突判定です。
日本語では「軸平行境界ボックス」と呼ばれ、ゲーム開発で最も基本的で高速な衝突判定手法の1つです。
特徴は、矩形の辺が必ずX軸、Y軸、Z軸に平行になっていること。
これにより、計算が非常にシンプルになり、処理速度も高速になります。
なぜAABBが高速なのか
AABBが高速な理由は、判定計算が非常に単純だからです。
2つのAABBが衝突しているかを判定するには、各軸方向での範囲を比較するだけ。
回転を考慮する必要がないため、複雑な数学的計算が不要なんです。
AABBの構造
AABBは、最小点(min)と最大点(max)の2点で表現されます。
2Dの場合は2点、3Dの場合は3次元空間での2点で定義可能。
これらの点だけで、矩形や直方体の範囲を完全に表現できるのが特徴です。
- 軸に平行な矩形・直方体で表現される
- 最小点と最大点の2点で定義できる
- 計算が非常にシンプルで高速
- 回転を考慮しないため実装が簡単
2DでのAABB衝突判定アルゴリズム

2DゲームでのAABB衝突判定は、最も基本的な実装です。
2つの矩形が重なっているかを判定するだけなので、理解しやすいのが特徴。
基本的な判定方法
2つのAABBが衝突しているかを判定するには、X軸とY軸のそれぞれで範囲が重なっているかを確認します。
X軸方向とY軸方向の両方で重なっていれば、衝突していると判定できます。
この判定方法は、分離軸定理の最もシンプルな応用です。
実装コード例(2D)
Unityで2DのAABB衝突判定を実装する場合、以下のようなコードになります。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
bool CheckAABBCollision2D(Vector2 min1, Vector2 max1, Vector2 min2, Vector2 max2) { // X軸方向での判定 bool xOverlap = (min1.x <= max2.x) && (max1.x >= min2.x); // Y軸方向での判定 bool yOverlap = (min1.y <= max2.y) && (max1.y >= min2.y); // 両方の軸で重なっていれば衝突 return xOverlap && yOverlap; } |
このコードでは、2つのAABBの最小点と最大点を比較して、重なりがあるかを判定しています。
条件式が成立する場合、その軸方向で重なっていることになります。
3DでのAABB衝突判定アルゴリズム

3DゲームでのAABB衝突判定は、2Dの考え方をZ軸方向にも拡張したものです。
基本的な考え方は同じで、X軸、Y軸、Z軸の3方向すべてで重なっているかを確認します。
3D判定の実装
3DでのAABB衝突判定は、以下のように実装できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
bool CheckAABBCollision3D(Vector3 min1, Vector3 max1, Vector3 min2, Vector3 max2) { // X軸方向での判定 bool xOverlap = (min1.x <= max2.x) && (max1.x >= min2.x); // Y軸方向での判定 bool yOverlap = (min1.y <= max2.y) && (max1.y >= min2.y); // Z軸方向での判定 bool zOverlap = (min1.z <= max2.z) && (max1.z >= min2.z); // 3方向すべてで重なっていれば衝突 return xOverlap && yOverlap && zOverlap; } |
2Dと同様に、各軸方向での範囲を比較するだけで判定可能。
3軸すべてで重なっていれば、2つの直方体が衝突していると判定できます。
Unityでの実装例
Unityでは、Bounds構造体を使ってAABBを扱えます。
|
1 2 3 4 5 6 7 8 |
Renderer renderer1 = object1.GetComponent(); Renderer renderer2 = object2.GetComponent(); Bounds bounds1 = renderer1.bounds; Bounds bounds2 = renderer2.bounds; bool isColliding = bounds1.Intersects(bounds2); |
UnityのBounds.Intersectsメソッドを使えば、簡単にAABB衝突判定ができます。
内部的には、先ほど説明したアルゴリズムと同じ計算を行っているんです。
AABB衝突判定の実装手順

※この順番を守らずに作り始めると、だいたい後で全部作り直すことになります。
- STEP1AABBの範囲を計算
オブジェクトの位置とサイズから、AABBの最小点と最大点を計算します。TransformとBoundsを使って取得するのが一般的です。
- STEP2衝突判定関数の実装
2つのAABBの範囲を比較する関数を実装します。X軸、Y軸(必要に応じてZ軸)での重なりを判定しましょう。
- STEP3判定の実行
毎フレームまたは必要なタイミングで、衝突判定を実行します。複数のオブジェクト間で判定を行う場合は、効率的なループ処理を心がけます。
- STEP4衝突時の処理
衝突が検出された場合の処理を実装します。ダメージ計算や反発処理など、ゲームの仕様に応じて実装しましょう。
- STEP5最適化
不要な判定を避けるため、距離チェックなどの最適化を行います。Broad PhaseとNarrow Phaseを分けることで、さらに高速化できます。
Unityでの実装例(C#コード)

UnityでAABB衝突判定を実装する具体的な例を見ていきましょう。
シンプルな衝突判定クラス
基本的なAABB衝突判定を行うクラスの例です。
|
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 |
using UnityEngine; public class AABBCollider : MonoBehaviour { private Bounds bounds; private Renderer renderer; void Start() { renderer = GetComponent(); UpdateBounds(); } void UpdateBounds() { if (renderer != null) { bounds = renderer.bounds; } else { // Rendererがない場合、Transformから計算 Vector3 center = transform.position; Vector3 size = transform.localScale; bounds = new Bounds(center, size); } } public bool CheckCollision(AABBCollider other) { UpdateBounds(); other.UpdateBounds(); return bounds.Intersects(other.bounds); } } |
このクラスでは、オブジェクトのBoundsを取得して、他のAABBColliderとの衝突を判定しています。
複数オブジェクト間の判定
複数のオブジェクト間でAABB衝突判定を行う場合の例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class AABBCollisionManager : MonoBehaviour { public AABBCollider[] colliders; void Update() { for (int i = 0; i < colliders.Length; i++) { for (int j = i + 1; j < colliders.Length; j++) { if (colliders[i].CheckCollision(colliders[j])) { Debug.Log($"衝突検出: {colliders[i].name} と {colliders[j].name}"); // 衝突時の処理 } } } } } |
この方法では、すべての組み合わせで衝突判定を行っています。
オブジェクト数が多くなると計算量が増えるため、最適化が必要になる場合があります。
- Boundsを毎フレーム更新すると処理負荷が高いため、必要な場合のみ更新する
- オブジェクト数が多い場合は、空間分割などの最適化を検討する
- Transformが変更された場合のみ、Boundsを更新するようにする
注意点:回転オブジェクトには不向き

AABBは非常に高速ですが、回転するオブジェクトには不向きという重要な制限があります。
なぜ回転に不向きなのか
AABBは軸に平行な矩形・直方体なので、オブジェクトが回転すると、AABBのサイズが大きくなってしまいます。
例えば、正方形のオブジェクトを45度回転させると、AABBは元の正方形より大きな矩形になります。
これにより、実際には衝突していないのに衝突判定が出てしまう、誤検出が発生する可能性があるんです。
回転オブジェクトへの対処法
回転するオブジェクトにAABBを使いたい場合は、以下のような対処法があります。
【方法1】AABBを更新する
オブジェクトが回転するたびに、新しいAABBを計算します。
回転後の各頂点の位置を計算して、その中から最小点と最大点を求める方法です。
【方法2】OBBを使用する
回転を考慮したOBB(Oriented Bounding Box)を使用する方法。
OBBは回転後の座標系で矩形・直方体を表現するため、回転オブジェクトにも正確に判定できます。
ただし、計算コストはAABBより高くなります。

精度と速度のバランスを取ることが大切です。
OBBとの違い

AABBとOBBの違いを理解しておくと、適切な判定方法を選択できます。
AABBとOBBの比較
| 項目 | AABB | OBB |
|---|---|---|
| 計算速度 | 非常に高速 | やや遅い |
| 回転対応 | 不向き | 対応可能 |
| 実装の難易度 | 簡単 | やや複雑 |
| 精度 | 回転時は低い | 高い |
AABBは計算が速いですが、回転には弱い。
OBBは回転に対応できるが、計算コストが高いという特徴があります。
使い分けのポイント
どの判定方法を使うかは、ゲームの要件によって決まります。
回転しないオブジェクト(床、壁、アイテムなど)にはAABBが最適。
回転するオブジェクト(プレイヤー、敵キャラクターなど)にはOBBや球の判定を検討しましょう。
- 回転しない固定オブジェクト → AABB
- 回転する動的オブジェクト → OBB または 球判定
- 高速な粗い判定が必要 → AABB(Broad Phase)
- 正確な判定が必要 → OBB または 詳細な形状判定
AABB衝突判定の最適化

大量のオブジェクト間でAABB衝突判定を行う場合、最適化が重要になります。
Broad PhaseとNarrow Phase
衝突判定を2段階に分けることで、効率化できます。
Broad Phase(粗い判定)では、AABBを使って遠く離れたオブジェクトを除外。
Narrow Phase(詳細な判定)では、残ったオブジェクトに対して正確な判定を行います。
これにより、不要な計算を大幅に削減できるんです。
空間分割の活用
オブジェクトを空間的に分割することで、判定の対象を絞り込めます。
グリッド分割やOctreeなどの手法を使えば、近くのオブジェクトのみを判定できます。
Unityでは、Physics2D.OverlapAreaやPhysics.OverlapBoxなど、空間クエリの機能も活用可能です。
- Broad PhaseとNarrow Phaseを分ける
- 空間分割を使って判定対象を絞り込む
- Boundsは必要な場合のみ更新する
- 距離チェックで遠いオブジェクトを除外する
AABB衝突判定の学習を深めるには

AABB衝突判定の基礎を理解した後は、さらに深く学んでいくことが大切です。
Unity入門の森では、ゲーム開発に必要な数学と物理の知識を体系的に学べる環境が整っています。
特に、永久会員チケットでは、衝突判定だけでなく、物理演算やゲーム数学など、関連する知識も幅広くカバーしています。
また、2Dアクションゲーム講座では、実際にゲームを作りながら、衝突判定の実践的な使い方を身につけられます。
当たり判定の基礎から応用まで、実際のコードと紐付けて学べるので、理解が深まりやすいはずです。
- AABBとは何か、なぜ高速なのか
- 2D・3DでのAABB衝突判定アルゴリズム
- Unityでの実装例(C#コード)
- 回転オブジェクトへの注意点
- OBBとの違いと使い分け
記事を読んで「作ってみたい!」と思ったら!人気ゲームを題材にした講座で実力をつけよう
知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを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でAABB衝突判定を実装する方法を解説しました。
AABBは、ゲーム開発において最も基本的で高速な衝突判定手法の1つです。
回転しないオブジェクトに対しては非常に効果的ですが、回転オブジェクトには不向きという制限があります。
「当たり判定って難しそう💧」と感じる方もいるかもしれませんが、AABBなら比較的簡単に実装できます。
まずは簡単な2D判定から始めて、徐々に3Dや最適化に挑戦していきましょう。
- AABBは軸に平行な矩形・直方体を使った高速な衝突判定
- 最小点と最大点の2点で定義でき、計算が非常にシンプル
- 2D・3Dともに、各軸方向での範囲比較だけで判定できる
- 回転しないオブジェクトには最適だが、回転オブジェクトには不向き
- 大量のオブジェクト間での判定には、最適化が必要な場合がある
まずは回転しない固定オブジェクトから始めて、徐々に応用的な使い方を覚えていきましょう。
Unity入門の森では、衝突判定の基礎から応用まで、実践的な知識を体系的に学べる環境が整っています。
疑問があれば、ぜひ活用してみてください。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。





コメント