3Dアクションの当たり判定が分からない。
RaycastとCollider、どちらを使えばいいのか迷う。
実は、用途に応じて使い分けることで、効率的に実装できます。
この記事では、3Dアクションの当たり判定について、RaycastとColliderの使い分けを解説します。
✨ この記事でわかること
- RaycastとColliderの違い
- それぞれの使い分け方
- 実装例とNG例
- 3D特有の当たり判定の考え方

3Dの当たり判定は、2Dと少し考え方が違います。まずは、RaycastとColliderの違いを理解しましょう。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
RaycastとColliderの違い

RaycastとColliderの考え方自体は2D・3D共通ですが、3Dでは奥行きや立体的な衝突を考慮する必要があるため、使い分けがより重要になります。
3Dアクションの当たり判定には、主に2つの方法があります。
- Raycast:「今この瞬間に当たっているか」を自分で調べる方法です。
そのため、攻撃・視線・距離測定など、タイミングが重要な判定に向いています。 - Collider:「触れたら自動で反応する」仕組みです。
壁との衝突や、敵にぶつかった時の処理など、常に判定したい場面に向いています。
それぞれ、用途が異なります。
どちらを使うかは、「一瞬だけ判定したいのか」「常に衝突を検知したいのか」で判断します。
Raycastの使い方

Raycastは、特定の方向に線を飛ばして、何かに当たったかを判定します。
攻撃判定や、地面との距離測定などに使います。
以下のコードで、基本的なRaycastができます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using UnityEngine; public class RaycastExample : MonoBehaviour { [SerializeField] private float attackRange = 5f; void Update() { if (Input.GetKeyDown(KeyCode.Z)) { RaycastHit hit; if (Physics.Raycast(transform.position, transform.forward, out hit, attackRange)) { if (hit.collider.CompareTag("Enemy")) { // 敵に当たった Debug.Log("敵に当たった: " + hit.collider.name); } } } } } |
このコードで、プレイヤーの正面にRaycastを飛ばし、敵に当たったかを判定できます。
attackRangeの値を変えると、攻撃範囲が調整できます。
なお、RaycastをUpdate内で頻繁に実行すると処理負荷が高くなる場合があります。
攻撃時など、必要なタイミングに限定して使用することが重要です。
Raycastの応用例
Raycastは、様々な用途に使えます。
- 攻撃判定:プレイヤーの正面にRaycastを飛ばす
- 地面判定:真下にRaycastを飛ばして、地面との距離を測定
- 視界判定:敵がプレイヤーを見ているかを判定
特に、攻撃判定ではRaycastが便利です。
プレイヤーの正面にRaycastを飛ばすだけで、攻撃判定ができます。

Raycastは、攻撃判定に最適です。プレイヤーの正面に飛ばすだけで、シンプルに実装できます。
Colliderの使い方

Colliderは、オブジェクト同士の衝突を自動で検知します。
敵との衝突判定や、アイテムの取得などに使います。
以下のコードで、基本的なCollider判定ができます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using UnityEngine; public class ColliderExample : MonoBehaviour { void OnTriggerEnter(Collider other) { if (other.CompareTag("Enemy")) { // 敵との衝突処理 Debug.Log("敵と衝突: " + other.name); } } void OnCollisionEnter(Collision collision) { if (collision.gameObject.CompareTag("Wall")) { // 壁との衝突処理 Debug.Log("壁と衝突: " + collision.gameObject.name); } } } |
OnTriggerEnterは、Is Triggerが有効なColliderで発生します。
OnCollisionEnterは、Is Triggerが無効なColliderで発生します。
用途に応じて使い分けます。
TriggerとCollisionの違い
Colliderには、2つのモードがあります。
- Trigger:すり抜けるが、衝突を検知する
- Collision:すり抜けず、物理的な衝突が発生する
Triggerは、アイテムの取得や、エリア判定などに使います。
Collisionは、壁との衝突や、敵との物理的な衝突などに使います。
使い分けのポイント

RaycastとColliderは、用途に応じて使い分けます。
| Raycastを使う場面 | Colliderを使う場面 |
| 攻撃判定 | 敵との衝突判定 |
| 地面との距離測定 | アイテムの取得 |
| 視界判定 | 壁との衝突 |
基本的には、攻撃判定にはRaycast、衝突判定にはColliderを使います。
ただし、状況に応じて使い分けることが大切です。
よくあるNG例と改善方法

3D当たり判定でよくある失敗例を紹介します。
NG例1:Raycastの距離が短すぎる
攻撃判定で、Raycastの距離が短すぎると、敵に当たりません。
⚠️ NG例
|
1 2 3 |
// 距離が短すぎる if (Physics.Raycast(transform.position, transform.forward, out hit, 1f)) |
改善方法:距離を適切に設定します。
|
1 2 3 |
// 距離を適切に設定 if (Physics.Raycast(transform.position, transform.forward, out hit, 5f)) |
NG例2:Colliderのサイズが適切でない
Colliderのサイズが小さすぎると、衝突が検知されません。
改善方法:Colliderのサイズを、オブジェクトのサイズに合わせて調整します。
NG例3:レイヤーの設定が間違っている
レイヤーの設定が間違っていると、衝突が検知されません。
改善方法:レイヤーを正しく設定し、Physics Settingsで衝突判定を有効にします。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
実践的な3D当たり判定を学ぶには

ここまで、3Dアクションの当たり判定について解説してきました。
ただし、実際のゲーム制作では、さらに多くの要素が必要になります。
アニメーション、エフェクト、UI、サウンドなど、全体を体系的に学ぶには、専門の講座が効率的です。
Unity入門の森では、3Dアクションゲームの作り方を、基礎から完成まで丁寧に解説しています。
コードの意味から、なぜその実装方法を選ぶのかまで、しっかり理解できる内容になっています。
3Dアクション制作に特化した講座なら、効率的にスキルアップできます。
ゲーム制作でスキルを上げたい方は、ぜひチェックしてみてください。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
まとめ

3Dアクションの当たり判定について解説しました。
要点のまとめ
- Raycastは、攻撃判定や距離測定に使う
- Colliderは、オブジェクト同士の衝突判定に使う
- 用途に応じて使い分けることが大切
- レイヤーの設定を正しく行う
基本を押さえれば、あとは応用していくだけです。
まずは、ここで紹介したコードを実際に動かしてみてください。
動かしながら理解を深めていくのが、上達への近道です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント