ゲーム数学を「使える力」に変えよう!ゲーム講座PDF無料プレゼント中>>

OBBの当たり判定が分かる|回転する箱同士の衝突判定を数学で理解

当たり判定の仕組みを数学で理解する|ゲーム衝突判定入門

AABBの当たり判定は理解できたけど、回転した箱同士の衝突判定はどうすればいいのか。

回転を考慮しないと、正確な当たり判定ができない場面が出てくる。

そんな悩みを抱えていませんか。

回転した箱の当たり判定には、OBB(Oriented Bounding Box)を使います。

OBBは、回転を考慮した箱の当たり判定で、より正確な衝突検出が可能です。

この記事では、OBBの当たり判定の仕組みを、Unity実装例とともに見ていきましょう。

【ゲームの作り方講座もプレゼント中!】

OBBとは何か(ゲーム制作目線)

OBBの基本構造

OBBは、Oriented Bounding Boxの略で、向きを持つ境界ボックスという意味です。

AABBが軸に並行な(回転していない)箱なのに対し、OBBは任意の方向に回転した箱です。

Unityでは、BoxColliderが回転している状態が、まさにOBBに該当します。

OBBの特徴は、回転を考慮したより正確な当たり判定ができることです。

AABBでは、回転した箱を扱う際、箱全体を囲む大きなAABBを作る必要があり、判定が大雑把になります。

OBBを使えば、回転後の正確な形状で判定できるため、より精密な衝突検出が可能になりますね。

ゲームでの具体的な使い道

OBBのゲームでの使用例

OBBがゲームでどう使われているか、具体例を確認してみましょう。

回転するオブジェクトの当たり判定

回転するドア、開閉する扉、回転する障害物など、回転を伴うオブジェクトの当たり判定にOBBが使われます。

AABBでは、回転しているオブジェクトを正しく判定できませんが、OBBなら回転後の正確な形状で判定できます。

複雑な形状の簡易判定

複雑な形状のオブジェクトに対して、OBBで大まかな当たり判定を行います。

その後、必要に応じてより精密な判定を行うという、2段階の判定方式で使われることが多いです。

物理演算との連携

Unityの物理演算では、BoxColliderが回転している場合、内部でOBBとして扱われます。

Rigidbodyと組み合わせることで、回転するオブジェクト同士の衝突を、物理エンジンが自動で処理してくれます。

カメラとの衝突判定

FPSゲームなどで、カメラが壁や障害物にめり込まないようにする際、OBBを使った判定が有効です。

カメラの視点方向に応じて判定を行うため、より自然な衝突回避が可能になりますね。

OBBを使う場面とAABBとの違い

  • OBB:回転した箱、より正確な判定が必要な場面
  • AABB:回転していない箱、高速な判定が必要な場面
  • OBBの計算はAABBより複雑だが、より正確な判定が可能

作り方は分かった。
でも完成まで行けない人へ

当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。

買い切り 全講座 今後追加も無料
永久会員チケットを見てみる

※ まずは内容を見るだけでOK

考え方・仕組みを図解イメージで説明

OBBの衝突判定の仕組み

OBBの衝突判定は、「分離軸定理(SAT: Separating Axis Theorem)」という方法で実現されます。

分離軸定理の考え方

2つのOBBが衝突していない場合、必ず分離軸が存在するという定理です。

分離軸とは、2つのOBBを分離する方向の軸のことで、この軸に沿って2つのOBBを投影すると、重なりがありません。

逆に、すべての候補となる軸で重なっていれば、2つのOBBは衝突していると判定できます。

OBBの表現方法

OBBは、中心点、3つの軸方向(X軸、Y軸、Z軸)、各軸の長さ(ハーフサイズ)で表現されます。

回転行列やクォータニオンを使って、軸の方向を定義します。

投影による判定

各軸方向にOBBを投影し、投影後の範囲が重なっているかを調べます。

すべての軸方向で重なっていれば衝突、1つでも重なっていない軸があれば衝突していません。

⚠️ 重要なポイント

  • OBBの衝突判定には分離軸定理(SAT)が使われる
  • すべての候補となる軸で投影を調べ、すべて重なっていれば衝突と判定
  • OBBは中心点、軸方向、各軸の長さで表現される
  • AABBより計算が複雑だが、より正確な判定が可能

Unityで実装する際の注意点(代表例)

UnityでのOBBの実装

UnityでOBBの衝突判定を実装する際の注意点を見ていきましょう。

BoxColliderを使ったOBB判定

Unityでは、BoxColliderコンポーネントが回転している場合、自動的にOBBとして扱われます。

物理演算を使う場合、Rigidbodyと組み合わせることで、回転する箱同士の衝突を自動で処理してくれます。

手動でOBB判定を実装する場合

物理演算を使わず、手動でOBBの衝突判定を実装する場合、分離軸定理を実装する必要があります。

以下のような関数を実装します。

Bounds.boundsを使った簡易判定

UnityのBounds.boundsプロパティは、回転を考慮した境界ボックスを返します。

ただし、これはOBBを囲むAABB(Axis-Aligned Bounding Box)を返すため、完全に正確ではありません。

簡易的な判定には使えますが、より正確な判定には分離軸定理の実装が必要です。

パフォーマンスの考慮

OBBの衝突判定は、AABBより計算コストが高いです。

大量のオブジェクトで判定を行う場合、まずAABBで大まかな判定を行い、衝突の可能性がある場合のみOBBで詳細判定を行うという、2段階の判定方式が有効です。

物理エンジンの活用

Unityの物理エンジンを使えば、OBBの判定を自動で処理してくれます。

OnCollisionEnterOnTriggerEnterなどのコールバック関数で、衝突を検出できます。

手動で実装するよりも、物理エンジンを使う方が確実で効率的です。

博士
博士
OBBの判定は少し複雑ですが、回転するオブジェクトの当たり判定には必須の技術です。まずはUnityの物理エンジンを使った実装から始めて、徐々に理解を深めていきましょう!

まとめ

OBBのまとめ

この記事では、OBBの当たり判定について見てきました。

重要なポイントをおさらいします。

重要なポイント:

  • OBBは回転を考慮した箱の当たり判定で、AABBより正確な判定が可能
  • 衝突判定には分離軸定理(SAT)が使われ、すべての軸で重なっていれば衝突と判定
  • ゲームでは、回転するオブジェクト、複雑な形状の簡易判定、物理演算との連携などに使われる
  • UnityではBoxColliderが回転している場合、自動的にOBBとして扱われる
  • OBBの計算はAABBより複雑だが、物理エンジンを活用することで効率的に実装できる

OBBは、回転するオブジェクトの当たり判定に必要な重要な技術です。

AABBを理解した後、次のステップとしてOBBを学ぶことで、より高度な当たり判定が可能です。

実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。

Unity入門の森では、OBBを含む当たり判定を、実際のゲーム実装とともに体系的に学べます。

ぜひチェックしてみてください。

ゲーム制作を“理解しながら”始めたい方へ
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます

【ゲームの作り方講座もプレゼント中!】

コメント

タイトルとURLをコピーしました