スポンサーリンク
エラー・トラブルシューティング

Unityで当たり判定がおかしい原因まとめ|Collider・Triggerが効かない時の対処法

エラー・トラブルシューティング

はじめに

「ちゃんと設定したはずなのに、オブジェクトがすり抜ける…」
「Triggerを使っているのに、なぜか反応しない…」

Unityでゲームを作っていると、当たり判定まわりで一度はこういう壁にぶつかりますよね。 見た目は正しく配置されているのに動かないと、「何が間違っているのか分からない…」と手が止まりがちです。

でも安心して大丈夫です。
当たり判定がうまくいかない原因は、実はかなりパターン化されています。

  • Rigidbodyが付いていない
  • Triggerの設定ミス
  • メソッド名の間違い
  • 2Dと3Dの混同

こういった「よくある原因」を順番に確認していけば、ほとんどの場合はすぐに解決できます。

当たり判定はなんとなく動かすこともできますが、仕組みを理解していないと、あとから必ず別のところで詰まります。 逆に言えば、ここを一度しっかり理解しておくと、今後の開発がかなりスムーズになります🙂

原因の特定から解決まで、一つずつ整理していきましょう。


結論:まずここを確認すれば解決できます

当たり判定の不具合は、原因を一つずつ探すよりも「よくあるポイント」を先に潰したほうが圧倒的に早く解決できます。

まずは次の5点を順番に確認してみてください。

  • Rigidbodyがどちらか一方に付いているか
  • Is Triggerの設定が目的と合っているか
  • メソッド名(OnCollision / OnTrigger)が正しく書かれているか
  • Colliderが有効で、サイズや位置がズレていないか
  • 2Dと3Dの物理を混同していないか

この5つで、体感ではほとんどのケースが解決します。

特に多いのが「Rigidbodyを付け忘れているパターン」です。
Colliderだけでは衝突は検知されないため、ここは最優先でチェックしてください。

もしここをすべて確認しても解決しない場合は、設定ではなく「仕組みの理解」がズレている可能性があります。
次のセクションで、当たり判定の基本構造を整理していきます。




Unityの当たり判定の仕組みを一瞬で理解する

設定をいくら見直しても直らないときは、「そもそもどういう仕組みで判定されているのか」が曖昧なことが多いです。 ここを一度スッキリ整理しておくと、原因の特定が一気にラクになります。

当たり判定はColliderとRigidbodyの組み合わせで決まる

Unityの当たり判定は、次の2つの組み合わせで成立します。

  • Collider:形(当たり判定の範囲)
  • Rigidbody:物理演算に参加するかどうか

ここで重要なのは、どちらか一方にRigidbodyが付いていないと、衝突は検知されないという点です。

よくあるNGパターンはこれです👇

  • 両方にColliderだけ付いている
  • Rigidbodyがどちらにもない

この状態だと、見た目はぶつかっていても「物理エンジン的には無関係」と扱われてしまいます。

基本ルールはシンプルで、

  • 動くオブジェクトにRigidbodyを付ける

これだけ覚えておけばOKです。

CollisionとTriggerの違い

当たり判定には2種類あります。

種類特徴使いどころ
Collisionぶつかる(物理的に止まる)壁・床・障害物
Triggerすり抜ける(イベントだけ発生)エリア判定・アイテム取得

つまり、「押し返したいかどうか」で使い分けると分かりやすいです。

逆に言うと、
「すり抜ける=バグ」ではなく、Triggerの仕様であることも多いです。

2Dと3Dは完全に別の物理システム

ここもかなりハマりやすいポイントです。

  • 3D:Rigidbody / Collider / OnCollisionEnter
  • 2D:Rigidbody2D / Collider2D / OnCollisionEnter2D

この2つは完全に別物なので、混ぜると一切動きません。

例えば、

  • Rigidbody2DなのにOnCollisionEnterを使う

こうすると、見た目は問題なくてもイベントは呼ばれません。

判断に迷ったときは、

  • コンポーネント名に「2D」が付いているか

これを基準にすると迷いにくくなります。

この仕組みが頭に入っていると、次の「原因特定」がかなりスムーズになります。




よくある原因5選

すり抜けるときはRigidbodyが付いていない

オブジェクト同士が完全に貫通してしまう場合、まず疑うべきはRigidbodyです。

見た目では当たっているように見えても、Rigidbodyがどちらにも付いていないと、Unityは衝突を検知しません。

考えられる原因

  • Colliderだけ付いていてRigidbodyがない
  • 両方ともStatic扱いになっている

解決方法

  • 動かす側のオブジェクトにRigidbodyを追加する

注意点

  • 重力を使いたくない場合は「Is Kinematic」をONにする

再発防止

  • 「動くもの=Rigidbody付き」と覚えておく

Triggerが反応しないときは設定かスクリプトを疑う

Triggerを使っているのにイベントが呼ばれない場合、設定かコードのどちらかに問題があるケースが多いです。

考えられる原因

  • Is TriggerがOFFになっている
  • OnTriggerEnterなどのメソッド名ミス

解決方法

  • Colliderの「Is Trigger」をONにする
  • メソッド名を正確に記述する

注意点

  • スペルミスや引数の型違いでも呼ばれない

再発防止

  • テンプレコードを用意して使い回す

当たっているのに反応しないときは2Dと3Dを確認する

見た目では確実に接触しているのに、イベントが発火しない場合は「2Dと3Dの混同」を疑います。

考えられる原因

  • Rigidbody2Dを使っているのに3D用のメソッドを書いている

解決方法

  • 2DならOnCollisionEnter2D / OnTriggerEnter2Dを使う

判断基準

  • コンポーネントに「2D」が付いているかを見る

再発防止

  • プロジェクト開始時に2Dか3Dかを明確に決める

反応が不安定なときはColliderのサイズと位置を疑う

当たるときと当たらないときがある場合、Colliderの形状や位置がズレていることが多いです。

考えられる原因

  • Colliderが小さすぎる
  • 見た目のモデルと位置がズレている

解決方法

  • SceneビューでColliderを可視化して調整する

注意点

  • スケール変更でColliderが歪むことがある

再発防止

  • Gizmos表示をONにして確認する習慣をつける

高速移動ですり抜けるときはCollision Detectionを変更する

弾や高速移動するオブジェクトがすり抜ける場合、設定ミスではなく「物理仕様」が原因のことがあります。

考えられる原因

  • 1フレームの間にColliderを通り抜けてしまう(トンネリング)

解決方法

  • RigidbodyのCollision Detectionを「Continuous」に変更する

注意点

  • 精度は上がるが処理負荷も上がる

判断基準

  • 速いオブジェクトほどContinuousを使う

再発防止

  • 高速オブジェクトは最初から設定しておく



当たり判定チェックリスト

原因が分からないときは、1つずつ考えるより「順番に潰す」方が早く解決できます。 上からチェックしていけば、ほとんどの場合は途中で原因に気づきます。

  • □ Rigidbodyがどちらか一方に付いている
  • □ Is Triggerの設定が目的と一致している
  • □ Colliderが有効(チェックON)になっている
  • □ Colliderのサイズ・位置が適切
  • □ メソッド名が正しい(スペル・引数含む)
  • □ 2Dと3Dを混同していない
  • □ Collision Detectionが適切に設定されている

チェックのコツは、「見た目ではなく内部状態を見ること」です。

例えば、

  • 当たって見える → 実際にはColliderがズレている
  • コードは正しそう → メソッド名が1文字違う

こういったケースはかなり多いです。

迷ったときは、次の順番で確認すると効率的です。

  1. Rigidbodyの有無
  2. Trigger設定
  3. スクリプト(メソッド名)
  4. Colliderの状態
  5. 物理設定(速度・Detection)

この順番で見ていけば、遠回りせずに原因にたどり着けます。




よくある誤解と正しい理解

当たり判定でハマる原因の多くは「設定ミス」よりも「思い込み」です。 ここでは、特に多い誤解と、その正しい理解を整理していきます。

Colliderがあれば当たり判定は発生する

これはかなり多い誤解です。

Colliderはあくまで「形」を定義しているだけで、衝突を検知するにはRigidbodyが必要になります。

つまり、

  • Colliderだけ → 判定されない
  • Collider+Rigidbody → 判定される

この違いを意識するだけで、原因特定がかなり早くなります。

Triggerは当たり判定がなくなる

「Is TriggerをONにすると当たり判定が消える」と思われがちですが、これは少し違います。

正しくは、

  • 物理的な衝突がなくなる(押し返されない)
  • イベントは発生する

つまり、Triggerは「当たり判定の別モード」です。

一度動いたから設定は正しい

一度うまく動いたからといって、設定が完全に正しいとは限りません。

例えば、

  • 速度が遅いと当たるが速いとすり抜ける
  • 特定の角度だけ反応しない

こういったケースはよくあります。

動作確認は「いろんな条件で試す」ことが大切です。

すり抜けはバグである

高速移動でのすり抜けは、Unityのバグではなく物理計算の仕様によるものです。

1フレームの間にオブジェクトが移動しすぎると、衝突判定をスキップしてしまいます。

この場合は設定で対応できます。

  • Collision DetectionをContinuousに変更

「仕様なのかミスなのか」を切り分けると、無駄に悩まずに済みます。




さらにハマる原因と対策

基本的な設定をすべて確認しても直らない場合、少しだけ踏み込んだポイントが原因になっていることがあります。 ここでは、中級者でもつまずきやすいポイントを整理していきます。

Layer Collision Matrixの設定を確認する

Unityでは、レイヤーごとに「どのオブジェクト同士が当たるか」を細かく制御できます。

この設定がOFFになっていると、正しく配置されていても衝突は発生しません。

確認手順

  • Edit → Project Settings → Physics を開く
  • Layer Collision Matrixを確認する

チェックが外れている組み合わせは、そもそも当たり判定が無効になります。

RigidbodyのIs Kinematicの影響

Is KinematicをONにすると、物理的な力の影響を受けなくなります。

ただし、

  • 当たり判定自体は発生する
  • ただし押し返しは行われない

この挙動が混乱の原因になりやすいです。

特に「動かしているのに当たり判定が変」というときは、Kinematicの状態を確認してみてください。

親子構造とRigidbodyの関係

Unityでは、Rigidbodyが親オブジェクトにある場合、子のColliderもまとめて扱われます。

つまり、

  • 子にCollider
  • 親にRigidbody

この構成でも当たり判定は機能します。

ただし、意図せず親側の設定に影響されることもあるため、構造はシンプルに保つのが安全です。

Raycastとの違いによる混乱

Raycastは「見えない線」で判定する仕組みで、Colliderとは別のシステムです。

そのため、

  • TriggerでもRaycastには当たる場合がある
  • 逆にColliderがあってもRaycastに当たらない設定もある

この違いを知らないと、「当たってるのに当たってない」と感じることがあります。

Raycastを使っている場合は、

  • Layer設定
  • QueryTriggerInteraction

も合わせて確認してみてください。




実際にハマった原因と解決の流れ

ここで、実際によくあるパターンを一つ紹介します。

プレイヤーが敵に触れたときにダメージ処理を入れたかったのですが、どうしてもTriggerが反応しないことがありました。 見た目ではしっかり重なっているのに、ログも一切出ません。

最初はスクリプトを疑って、何度も書き直したりデバッグログを追加したりしましたが、それでも反応しませんでした。

最終的な原因はかなりシンプルで、

  • Rigidbody2Dを使っているのにOnTriggerEnterを使っていた

これだけでした。

正しくは、

  • OnTriggerEnter2D

にする必要があります。

このときの気づきとして大きかったのは、

  • 「見た目が正しい」と「内部が正しい」は別

という点です。

また、原因特定の流れも重要です。

  1. Rigidbodyの有無を確認
  2. Trigger設定を確認
  3. メソッド名を確認
  4. 2D / 3Dの一致を確認

この順番でチェックしていけば、無駄に遠回りせずに原因にたどり着けます。

特に初心者のうちは、「スクリプトが悪い」と思い込みがちですが、実際には設定ミスの方が圧倒的に多いです。

迷ったときは、まず設定から疑うクセをつけると安定します。


学習を深めたい人へ

当たり判定のトラブルは、表面的な対処だけでも一時的には解決できます。 ただ、仕組みの理解があいまいなままだと、別の場面で同じように詰まることが多いです。

特に次のようなケースでは、知識の積み重ねがかなり効いてきます。

  • 複雑な当たり判定(複数Collider・敵AIなど)
  • 物理挙動を細かく制御したいとき
  • パフォーマンスと精度のバランスを取りたいとき

こういった場面では、「なんとなく設定する」ではなく、「なぜそうなるか」を理解しているかどうかで差が出ます。

体系的に学び直したい場合は、物理・Rigidbody・衝突の基礎を一度しっかり整理しておくのがおすすめです。

楽しく学ぶUnity「3Dゲーム」作りのきほん Unity6対応
✅ Amazonでチェックする✅ 楽天でチェックする

基礎を押さえておくと、今回のようなトラブルにも「どこを見ればいいか」が自然と分かるようになります。 結果的に、デバッグにかかる時間もかなり短くなります。


関連記事

当たり判定の理解をさらに深めたい場合は、次の記事もあわせて確認してみてください。 実際の使い方や応用例までイメージしやすくなります。

「なぜ動くのか」「どう使い分けるのか」が理解できるようになると、応用の幅も一気に広がります。




まとめ

当たり判定がうまくいかないときは、複雑に考えるよりも「よくある原因」を順番に潰すのが一番早いです。

特に重要なのは次のポイントです。

  • Rigidbodyがどちらか一方に付いているか
  • TriggerとCollisionの使い分けが正しいか
  • メソッド名が正確に書かれているか
  • 2Dと3Dを混同していないか

この4つを意識するだけで、多くのトラブルは回避できます。

また、症状ごとの判断基準も覚えておくと便利です。

  • すり抜ける → Rigidbody or 速度の問題
  • 反応しない → メソッド or Trigger設定
  • 不安定 → Colliderの位置やサイズ

一見すると難しそうに感じるかもしれませんが、仕組みは意外とシンプルです。

「どこが原因か分からない状態」から抜け出せるようになると、デバッグのスピードがかなり変わります。

次に同じような問題が起きたときは、今回のチェックリストを思い出してみてください。


よくある質問(FAQ)

Q
Rigidbodyは両方に付ける必要がありますか?
A

必ずしも両方に付ける必要はありません。
基本的には「どちらか一方」にRigidbodyが付いていれば当たり判定は発生します。

ただし、動くオブジェクト側に付けるのが一般的です。
両方に付けると物理挙動が複雑になる場合もあるので、目的に応じて使い分けるのがポイントです。

Q
TriggerとCollisionはどちらを使えばいいですか?
A

判断基準はとてもシンプルです。

  • 物理的にぶつかって止めたい → Collision
  • 接触を検知するだけでいい → Trigger

例えば、壁や床はCollision、アイテム取得やエリア判定はTriggerが向いています。

Q
たまにだけ当たらないのはなぜですか?
A

この場合は設定ミスではなく、物理計算の仕様が原因の可能性があります。

  • オブジェクトの移動速度が速すぎる
  • Collision DetectionがDiscreteのまま

対策としては、Rigidbodyの「Collision Detection」をContinuous系に変更するのが有効です。
特に弾や高速移動するオブジェクトでは必須になることが多いです。

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク