オブジェクト同士が衝突したかを判定したい。
でも、どうやって計算すればいいのか分からない。
実は、当たり判定は、数学的な計算によって実現できます。
当たり判定の仕組みは、2つのオブジェクトが重なっているかを判定する処理です。
距離計算や、形状同士の交差判定など、様々な数学的手法が使われます。
この記事では、当たり判定の仕組みについて、Unity実装例とともに解説します。
- 当たり判定の仕組みが分からない…
- 衝突検出の原理が理解できていない。
- 当たり判定を実装したい。
✨ この記事でわかること
- 当たり判定の基本概念
- 衝突検出の原理
- 距離計算による判定方法
- 形状同士の交差判定
- 初心者でも理解できる当たり判定の考え方
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます
当たり判定の仕組みとは何か(ゲーム制作目線)

当たり判定の仕組みは、2つのオブジェクトが重なっているかを判定する処理です。
ゲーム開発では、衝突検出とも呼ばれます。
当たり判定の基本は、距離計算や、形状同士の交差判定です。
2つのオブジェクトの距離を計算し、一定の範囲内にあるかを判定します。
または、オブジェクトの形状同士が交差しているかを判定します。
Unityでは、Colliderコンポーネントや、Physics.Raycastなどを使って、当たり判定を実装できます。
ゲームでの具体的な使い道

当たり判定の仕組みが、ゲームでどう使われているか確認してみましょう。
敵と弾の衝突判定
シューティングゲームで、プレイヤーの弾が敵に当たったかを判定します。
弾と敵の距離を計算し、一定の範囲内にあるかを判定します。
プレイヤーと障害物の衝突判定
アクションゲームで、プレイヤーが障害物にぶつかったかを判定します。
プレイヤーと障害物の形状が交差しているかを判定します。
アイテムの取得判定
プレイヤーがアイテムを取得したかを判定します。
プレイヤーとアイテムの距離を計算し、一定の範囲内にあるかを判定します。
地面との衝突判定
プレイヤーが地面に着地したかを判定します。
プレイヤーの位置と、地面の高さを比較して判定します。
- 敵と弾の衝突判定
- プレイヤーと障害物の衝突判定
- アイテムの取得判定
- 地面との衝突判定
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

当たり判定の仕組みは、「距離の計算 → 範囲の判定 → 衝突の検出」という流れで実現できます。
距離の計算
2つのオブジェクトの距離を計算します。
ベクトルの距離公式を使って、距離を求めます。
範囲の判定
計算した距離が、一定の範囲内にあるかを判定します。
オブジェクトの半径や、判定範囲と比較します。
衝突の検出
範囲内にあれば、衝突していると判定します。
衝突が検出されたら、適切な処理を行います。
- 当たり判定は、距離計算や形状同士の交差判定で実現する
- 2つのオブジェクトの距離を計算し、一定の範囲内にあるかを判定する
- UnityのColliderコンポーネントや、Physics.Raycastで簡単に実装できる
- パフォーマンスを考慮して、適切な判定方法を選択することが重要
Unityで実装する際の注意点(代表例)

Unityで当たり判定の仕組みを実装する場合の注意点を見ていきましょう。
距離による判定
2つのオブジェクトの距離を計算して、当たり判定を行います。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class DistanceCollision : MonoBehaviour { public Transform target; public float detectionRange = 5f; void Update() { // 距離を計算 float distance = Vector3.Distance(transform.position, target.position); // 範囲内にあるか判定 if (distance < detectionRange) { Debug.Log("衝突検出!"); } } } |
Colliderを使った判定
UnityのColliderコンポーネントを使って、当たり判定を行います。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class ColliderCollision : MonoBehaviour { void OnTriggerEnter(Collider other) { Debug.Log($"衝突検出: {other.name}"); } void OnCollisionEnter(Collision collision) { Debug.Log($"衝突検出(物理): {collision.gameObject.name}"); } } |
Raycastを使った判定
Raycastを使って、オブジェクトとの衝突を判定します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class RaycastCollision : MonoBehaviour { public float rayDistance = 10f; void Update() { RaycastHit hit; if (Physics.Raycast(transform.position, transform.forward, out hit, rayDistance)) { Debug.Log($"衝突検出: {hit.collider.name}"); } } } |
球同士の判定
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("球同士が衝突しています"); } } } |

まとめ

この記事では、当たり判定の仕組みについて見てきました。
重要なポイントをおさらいします。
- 当たり判定は、距離計算や形状同士の交差判定で実現する
- 2つのオブジェクトの距離を計算し、一定の範囲内にあるかを判定する
- UnityのColliderコンポーネントや、Physics.Raycastで簡単に実装できる
- パフォーマンスを考慮して、適切な判定方法を選択することが重要
- 球同士やボックス同士など、様々な形状での判定が可能
当たり判定の仕組みは、ゲーム開発で重要な技術です。
距離計算や形状同士の交差判定で実現すれば、様々な衝突検出ができます。
Unityの便利な関数を使うことで、簡単に実装できます。
実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。
Unity入門の森では、当たり判定を含む衝突判定を、実際のゲーム実装とともに体系的に学べます。
ぜひチェックしてみてください。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント