当たり判定に使う数学が、よく分からない。
衝突検出アルゴリズムの基礎を知りたい。
実は、当たり判定には、距離計算やベクトル計算などの数学が必要です。
当たり判定数学は、衝突検出アルゴリズムの基礎となる数学です。
距離計算、ベクトル計算、形状同士の交差判定など、様々な数学的手法が使われます。
この記事では、当たり判定に必要な数学について、Unity実装例とともに解説します。
- 当たり判定に必要な数学が分からない…
- 衝突検出アルゴリズムの基礎が理解できていない。
- 当たり判定で使う数学を知りたい。
✨ この記事でわかること
- 当たり判定に必要な数学の全体像
- 距離計算の基礎
- ベクトル計算の応用
- 形状同士の交差判定
- 初心者でも理解できる当たり判定の数学
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます
当たり判定数学とは何か(ゲーム制作目線)

当たり判定数学は、衝突検出アルゴリズムの基礎となる数学的知識です。
距離計算、ベクトル計算、形状同士の交差判定など、様々な数学的手法が使われます。
これらを使うことで、正確な当たり判定を実現できます。
当たり判定には、点と点の距離、点と線の距離、点と面の距離など、様々な距離計算が使われます。
また、内積や外積などのベクトル計算も重要です。
Unityでは、これらの数学を組み合わせて、当たり判定アルゴリズムを実装できます。
ゲームでの具体的な使い道

当たり判定数学が、ゲームでどう使われているか確認してみましょう。
距離による判定
2つのオブジェクトの距離を計算して、当たり判定を行います。
距離が一定の範囲内にあれば、衝突していると判定します。
ベクトルによる判定
方向ベクトルを使って、当たり判定を行います。
内積や外積を使って、オブジェクトの位置関係を判定します。
形状同士の交差判定
2つの形状が交差しているかを判定します。
AABB、OBB、球など、様々な形状での判定が可能になりますね。
レイキャスト
レイとオブジェクトの交差を判定します。
マウス位置から3D空間への変換などに使われます。
- 距離による判定(点と点の距離)
- ベクトルによる判定(内積、外積)
- 形状同士の交差判定(AABB、OBB、球)
- レイキャスト(レイとオブジェクトの交差)
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

当たり判定数学は、「距離の計算 → ベクトルの計算 → 形状の判定 → 衝突の検出」という流れで実現できます。
距離の計算
2つの点の距離を計算します。
ベクトルの距離公式を使って、距離を求めます。
ベクトルの計算
内積や外積を使って、オブジェクトの位置関係を計算します。
方向や角度などを求めます。
形状の判定
2つの形状が交差しているかを判定します。
AABB、OBB、球など、様々な形状での判定が可能になりますね。
衝突の検出
計算結果から、衝突を検出します。
衝突が検出されたら、適切な処理を行います。
- 当たり判定数学は、距離計算やベクトル計算が基礎となる
- 内積や外積などのベクトル計算が重要
- AABB、OBB、球など、様々な形状での判定が可能
- パフォーマンスを考慮して、適切な判定方法を選択することが重要
Unityで実装する際の注意点(代表例)

Unityで当たり判定数学を実装する場合の注意点を見ていきましょう。
距離計算の実装
Vector3.Distanceを使って、距離を計算します。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
public class DistanceCalculation : MonoBehaviour { public Transform target; void Update() { // 距離を計算 float distance = Vector3.Distance(transform.position, target.position); Debug.Log($"距離: {distance}"); } } |
内積を使った判定
内積を使って、オブジェクトの位置関係を判定します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class DotProductCheck : MonoBehaviour { public Transform target; void Update() { Vector3 direction = (target.position - transform.position).normalized; Vector3 forward = transform.forward; // 内積を計算(-1から1の範囲) float dot = Vector3.Dot(direction, forward); // 前方にあるか判定(内積が0より大きい場合) if (dot > 0f) { Debug.Log("前方にあります"); } } } |
外積を使った判定
外積を使って、法線ベクトルや回転方向を計算します。
|
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 CrossProductCheck : MonoBehaviour { public Transform target; void Update() { Vector3 direction = (target.position - transform.position).normalized; Vector3 forward = transform.forward; // 外積を計算(垂直なベクトル) Vector3 cross = Vector3.Cross(forward, direction); // 右回りか左回りか判定 if (cross.y > 0f) { Debug.Log("左にあります"); } else if (cross.y < 0f) { Debug.Log("右にあります"); } } } |
球同士の判定
2つの球が衝突しているかを判定します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class SphereCollision : MonoBehaviour { public Transform target; public float radius1 = 1f; public float radius2 = 1f; void Update() { float distance = Vector3.Distance(transform.position, target.position); float sumRadius = radius1 + radius2; if (distance < sumRadius) { Debug.Log("球同士が衝突しています"); } } } |

まとめ

この記事では、当たり判定に必要な数学について見てきました。
重要なポイントをおさらいします。
- 当たり判定数学は、距離計算やベクトル計算が基礎となる
- 内積や外積などのベクトル計算が重要
- AABB、OBB、球など、様々な形状での判定が可能
- UnityのVector3クラスで簡単に計算できる
- パフォーマンスを考慮して、適切な判定方法を選択することが重要
当たり判定数学は、ゲーム開発で重要な技術です。
距離計算やベクトル計算を組み合わせることで、正確な当たり判定を実現できます。
内積や外積などのベクトル計算を活用すれば、様々な判定ができます。
実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。
Unity入門の森では、当たり判定を含む衝突判定を、実際のゲーム実装とともに体系的に学べます。
ぜひチェックしてみてください。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント