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

Unityでクリック判定ができない原因まとめ|Raycast・Collider・Layerの確認方法

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

「Colliderを付けたのにクリックできない……」

「Raycastを使っているのに何も当たらない……」

「ボタンを押しているはずなのに反応しない……」

Unityでクリック判定を実装していると、一度はこんな壁にぶつかります。

特に困るのが、エラーメッセージが出ないケースです。コンソールは静かなのに、クリックだけが反応しないため、どこを確認すればよいのか分からなくなってしまいます。

実際には、クリック判定のトラブルの多くは次のような設定に原因があります。

  • Colliderの設定
  • Layerの設定
  • Raycastの設定
  • UIシステムの設定
  • 2Dと3Dの判定方式の違い

私もUnityを触り始めた頃は、スクリプトの書き方ばかり疑って何時間も悩んだことがありました。しかし後から振り返ると、原因はColliderが無効になっていただけだったり、Layer設定を見落としていただけだったりします。

クリック判定の不具合は、やみくもにコードを書き直すよりも、原因を順番に切り分けたほうが圧倒的に早く解決できます。

クリックしたオブジェクトが選択できない場合も、OnMouseDownが動かない場合も、UIボタンが押せない場合も、確認すべきポイントを順番に見ていけば原因を特定しやすくなります。


Unityでクリックできない時の結論チェックリスト

クリック判定が動かない場合、最初からコードを見直す必要はありません。

まずは発生頻度の高い原因から確認していくほうが効率的です。実際には、スクリプトそのものではなく設定ミスが原因になっているケースが多く見られます。

まず確認するべき5項目

  • Colliderは付いているか
  • オブジェクトが「Ignore Raycast」レイヤーになっていないか
  • シーン内にEventSystemが存在するか
  • 2DゲームなのにPhysics.Raycastを使っていないか
  • Camera.mainを使っている場合、MainCameraタグが設定されているか

この5項目を確認するだけで、多くのクリック判定トラブルは解決できます。

特に初心者の方はスクリプトの書き方を疑いがちですが、実際にはColliderの付け忘れやLayer設定のミスのほうが圧倒的に多い印象です。

症状別に見るべき場所

症状最初に確認する項目
OnMouseDownが動かないCollider
RaycastがHitしないLayer設定
UIボタンが押せないEventSystem
2Dオブジェクトだけ反応しないPhysics2D.Raycast
一部のオブジェクトだけ反応しないLayerMask

もし「UIが反応しない」のにColliderばかり確認していたり、「Raycastが当たらない」のにEventSystemを調べていたりすると、なかなか原因にたどり着けません。

まずは自分が扱っているのが「3Dオブジェクト」「2Dオブジェクト」「UI」のどれなのかを整理してから確認を始めると、かなりスムーズに原因を見つけられます。




UnityでOnMouseDownが動かない原因

OnMouseDownはUnityが用意しているクリックイベントです。

便利な機能ですが、いくつかの条件を満たしていないと呼び出されません。

「スクリプトは正しいはずなのに反応しない」という場合は、まず以下のポイントを確認してみましょう。

Colliderが付いていない

OnMouseDownが反応するためには、対象オブジェクトにColliderが必要です。

例えばCubeをクリックしたい場合、以下のようなColliderが付いている必要があります。

  • Box Collider
  • Sphere Collider
  • Capsule Collider
  • Mesh Collider

Colliderが存在しない場合、見た目は表示されていてもクリック対象として認識されません。

特に3Dモデルをインポートした直後はColliderが付いていないこともあるため注意しましょう。

Colliderが無効になっている

Colliderが付いていても、Inspectorのチェックボックスがオフになっていると判定されません。

Colliderコンポーネントの左側にあるチェックマークが有効になっているか確認してください。

開発中に一時的に無効化したまま忘れてしまうケースは意外とよくあります。

スクリプトの配置場所が違う

OnMouseDownはクリックされたオブジェクト自身のスクリプトで実装する必要があります。

例えば次のような構成を考えてみましょう。

  • Player(スクリプトあり)
  • Cube(Colliderあり)

この状態でCubeをクリックしても、Playerに書かれたOnMouseDownは実行されません。

クリック判定を受け取りたいオブジェクトとスクリプトが同じGameObject上にあるか確認しましょう。

Trigger設定で反応しないケース

Colliderの「Is Trigger」を有効にしている場合、プロジェクト設定や実装内容によっては期待通りに判定されないことがあります。

特にRaycastを使用しているケースでは、Trigger判定を取得する設定が影響する場合があります。

そのため原因が分からない時は、一度Is Triggerをオフにして挙動を確認してみるのがおすすめです。

Triggerを使用する理由がないのであれば、まず通常のCollider状態でクリック判定が動作するか確認すると切り分けしやすくなります。

OnMouseDownが動かない場合は、まずColliderの有無とスクリプトの配置場所を確認してください。私の経験では、この2つだけで原因が見つかるケースがかなり多いです。




UnityでRaycastが当たらない原因

Colliderが正しく設定されているのにクリック判定が反応しない場合は、Raycast側の設定を疑ってみましょう。

Raycastは「見えないレーザー」を飛ばしてオブジェクトを検出する仕組みです。

そのため、Colliderが存在していてもRayが届いていなければHitしません。

Raycastの仕組みや基本的な使い方を確認したい場合は、こちらの記事も参考になります。

Ignore Raycastレイヤーになっている

最初に確認したいのがLayer設定です。

オブジェクトのLayerが「Ignore Raycast」になっている場合、Unity標準のRaycast判定から除外されます。

Colliderが付いていてもHitしないため、一見すると原因が分かりにくいポイントです。

Hierarchyで対象オブジェクトを選択し、Inspector上部のLayerを確認してみましょう。

LayerMaskで除外している

LayerMaskを使っている場合、自分で対象レイヤーを除外している可能性があります。

例えば次のようなコードです。

Physics.Raycast(ray, out hit, 100f, layerMask);

この場合、layerMaskに含まれていないレイヤーは判定対象になりません。

「一部のオブジェクトだけクリックできない」という症状なら、LayerMaskの設定を確認してみてください。

Raycast距離が足りない

Raycastには最大距離を指定できます。

Physics.Raycast(ray, out hit, 5f);

この場合、5メートル先までしか判定されません。

カメラとオブジェクトの距離が離れていると、ColliderがあってもHitしなくなります。

原因調査中は十分大きな値を指定して確認すると切り分けしやすくなります。

Camera.mainが取得できていない

クリック判定では次のようなコードを使うことがよくあります。

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

この時、使用中のカメラに「MainCamera」タグが付いていないとCamera.mainは取得できません。

結果としてRayが生成されず、クリック判定も動作しなくなります。

カメラを複数使用しているプロジェクトでは特に起こりやすいミスです。

Rayの向きが間違っている

Rayが予想とは違う方向へ飛んでいるケースもあります。

この場合はDebug.DrawRayを使って可視化すると原因を特定しやすくなります。

Debug.DrawRay(ray.origin, ray.direction * 100f, Color.red);

Sceneビューで赤い線がどこへ飛んでいるか確認すると、「実はカメラとは逆方向へ飛んでいた」という問題に気付けることがあります。

私もRaycastが当たらない時は、まずLayerを確認し、その次にDebug.DrawRayで向きを確認しています。この2つで原因が見つかることがかなり多い印象です。

Raycastの不具合はコードよりも設定や座標の問題であることが多いため、ColliderだけでなくLayer・Camera・距離もセットで確認してみてください。

Unityの教科書 Unity 6完全対応版
✅ Amazonでチェックする✅ 楽天でチェックする




UnityでUIがクリックできない原因

3DオブジェクトにはRaycastが当たるのに、Buttonだけ押せない場合はUIシステム側の問題である可能性が高いです。

UnityのUIはPhysics.Raycastとは別の仕組みで動いています。

そのため、ColliderやLayerを確認しても解決しないケースがあります。

UIのクリックトラブルを詳しく確認したい場合は、こちらの記事も参考になります。

EventSystemが存在しない

UIが反応しない時に最も多い原因の一つがEventSystemの不足です。

Hierarchyに「EventSystem」が存在しない場合、ButtonやToggleなどのクリックイベントは発生しません。

特に以下のような場面で発生しやすいです。

  • 新しいシーンを作成した直後
  • EventSystemを誤って削除した
  • サンプルシーンを流用した

Hierarchyを確認し、EventSystemオブジェクトが存在するか確認しましょう。

Graphic Raycasterが無効になっている

Canvasには通常「Graphic Raycaster」というコンポーネントが付いています。

これが無効になっていると、UIは表示されていてもクリックを受け取れません。

Canvasを選択し、InspectorでGraphic Raycasterが有効になっているか確認してください。

UIが見えているため気付きにくいのですが、クリック判定には必須のコンポーネントです。

透明UIがクリックを遮っている

実はかなり多いのがこのケースです。

例えば次のような構成になっているとします。

  • Button
  • 透明なImage

透明なImageが前面にあり、「Raycast Target」が有効になっている場合、Buttonまでクリックが届きません。

見た目では何もないように見えるため、原因に気付きにくいポイントです。

Hierarchyで前面に配置されているUIを確認し、不要なRaycast Targetはオフにしてみましょう。

Button自体が無効になっている

Buttonコンポーネントには「Interactable」という設定があります。

これがオフになっていると、見た目は表示されていてもクリックできません。

また、親オブジェクトが非アクティブになっている場合も同様に操作できなくなります。

Buttonがグレーアウトして見える場合は、まずInteractableを確認してみてください。

UIのクリック判定はPhysicsとは別システムです。

そのため、ColliderやRaycastばかり確認していると遠回りになってしまいます。

UIが反応しない場合は、まずEventSystem、次にGraphic Raycaster、その後にRaycast Targetの順で確認すると効率よく原因を見つけられます。




Unityクリック判定の3分診断手順

ここまでの内容を読んで、「結局どこから確認すればいいの?」と思った方もいるかもしれません。

そんな時は、症状ごとに確認順序を固定してしまうのがおすすめです。

上から順番に確認していけば、原因をかなり効率よく絞り込めます。

オブジェクトをクリックできない場合

3Dオブジェクトやゲーム内オブジェクトが反応しない場合は、次の順番で確認してみましょう。

  1. Colliderが付いているか
  2. Colliderが有効になっているか
  3. LayerがIgnore Raycastではないか
  4. Camera.mainが取得できるか
  5. Raycastが正しい方向へ飛んでいるか

この順番がおすすめなのは、上にある項目ほど発生頻度が高いからです。

例えばRaycastのコードを30分見直した後に、「Colliderが付いていなかった」と気付くと少し切ないですよね。

まずはInspectorで確認できる項目から調べるほうが効率的です。

UIをクリックできない場合

ButtonやToggleなどのUIが反応しない場合は、Physics関連の設定よりUIシステムを優先して確認します。

  1. EventSystemが存在するか
  2. CanvasにGraphic Raycasterが付いているか
  3. ButtonのInteractableが有効か
  4. 透明UIが前面を覆っていないか
  5. クリックイベントが正しく登録されているか

特に透明Imageによるクリック遮断は見落としやすいため、Hierarchyの表示順も確認してみてください。

2Dゲームの場合

2Dゲームでは3Dゲームとは別の確認ポイントがあります。

  1. Collider2Dを使用しているか
  2. Physics2D.Raycastを使用しているか
  3. RaycastHit2Dを使用しているか
  4. 対象オブジェクトにCollider2Dが付いているか
  5. LayerMaskで除外していないか

2Dと3Dの物理システムは連携しません。

そのため、「Box Collider 2D」と「Physics.Raycast」のように混在している場合は正常に動作しない可能性があります。

私がクリック判定のトラブルを調査する時も、まずはCollider→Layer→Cameraの順番で確認しています。

この流れを覚えておくと、原因調査の時間をかなり短縮できます。

原因が分からない時ほどコードを書き換えたくなりますが、先に設定を確認したほうが解決が早いケースは非常に多いです。




Unity初心者がよく誤解するポイント

クリック判定のトラブルは、設定ミスだけでなく仕組みの誤解が原因になっていることも少なくありません。

ここでは、初心者の方が特につまずきやすいポイントを整理しておきます。

Colliderを付ければ必ず反応する

Colliderはクリック判定に必要な要素ですが、それだけで十分ではありません。

例えば次のような状態ではColliderが付いていてもクリックできません。

  • Ignore Raycastレイヤーになっている
  • Raycast距離が足りない
  • LayerMaskで除外されている
  • Camera.mainが取得できていない

Colliderはあくまで「当たり判定の形」です。

Rayが届き、判定対象になって初めてクリックできます。

TagとLayerは同じもの

TagとLayerは似ているようで用途が異なります。

Tagはオブジェクトの分類に使われることが多く、Layerは描画や物理判定の対象を制御するために使われます。

例えば敵キャラクターを探すならTagを使うことがありますが、Raycast対象を限定する場合はLayerを使います。

Layerを理解していないと、Raycastが当たらない原因を見落としてしまうことがあります。

UIもPhysics.Raycastで判定される

UIは物理システムではなく、EventSystemとGraphic Raycasterによって管理されています。

そのため、Physics.Raycastが正常でもButtonが押せるとは限りません。

逆にUIが反応しなくても、3Dオブジェクトのクリック判定は正常に動作することがあります。

UIと3Dオブジェクトは別の仕組みで動いていると覚えておくと整理しやすくなります。

OnMouseDownとRaycastは同じ

どちらもクリック判定に使われますが、役割は異なります。

機能特徴
OnMouseDown簡単に実装できる
Physics.Raycast判定対象や条件を細かく制御できる

学習段階ではOnMouseDownが扱いやすいですが、本格的なゲーム開発ではRaycastを利用するケースが増えていきます。

どちらが優れているというより、用途に応じて使い分けることが大切です。

クリック判定が動かない時は、コードの問題だけでなく「そもそも仕組みを勘違いしていないか」という視点で確認すると、意外と早く原因が見つかることがあります。




まとめ|クリックできない時はCollider→Layer→UIの順で確認

Unityでクリック判定が動かない場合、多くのケースはスクリプトそのものではなく設定に原因があります。

特に確認頻度が高いのは次の3つです。

  • Colliderの設定
  • Layerの設定
  • UIシステムの設定

まずはColliderが付いているか、無効になっていないかを確認しましょう。

次にLayer設定を確認し、Ignore RaycastやLayerMaskによって判定対象から外れていないかを調べます。

UIが反応しない場合は、Physics関連ではなくEventSystemやGraphic Raycasterを優先して確認するのが近道です。

また、2DゲームではPhysics2D.RaycastとCollider2D、3DゲームではPhysics.RaycastとColliderを使う必要があります。

この組み合わせが混在していると、見た目は正しくてもクリック判定は動きません。

私自身もクリック判定のトラブルに遭遇した時は、いきなりコードを書き換えるのではなく次の順番で確認しています。

  1. Collider
  2. Layer
  3. EventSystem
  4. Camera
  5. Raycast

この順番で調べるだけでも、原因調査の時間はかなり短縮できます。

クリック判定はゲーム内の多くの機能で利用される重要な仕組みです。

今回紹介したチェックポイントを覚えておけば、オブジェクト選択やアイテム取得、UI操作などさまざまな場面でトラブルを素早く解決できるようになります。


よくある質問(FAQ)

Q
Colliderを付けたのにクリックできません
A

Colliderが付いていても、Layer設定やRaycast設定が原因でクリックできないことがあります。

特に次の項目は見落とされやすいポイントです。

  • Ignore Raycastレイヤーになっている
  • LayerMaskで除外されている
  • Camera.mainが取得できていない
  • Raycast距離が足りない

Colliderだけでなく、LayerとCameraも合わせて確認してみてください。

Q
Physics.RaycastとPhysics2D.Raycastはどちらを使えばいいですか?
A

3DゲームならPhysics.Raycast、2DゲームならPhysics2D.Raycastを使用します。

例えばBox ColliderにはPhysics.Raycast、Box Collider 2DにはPhysics2D.Raycastを組み合わせます。

Colliderの種類とRaycastの種類が一致していないと判定されないため、まずはInspectorでColliderを確認すると判断しやすくなります。

Q
OnMouseDownとRaycastはどちらがおすすめですか?
A

簡単なクリック判定ならOnMouseDown、本格的なゲーム開発ならRaycastが選ばれることが多いです。

OnMouseDownは実装が簡単ですが、細かな制御には向いていません。

一方でRaycastはLayer指定や距離制限など柔軟な制御が可能です。

学習段階ではOnMouseDownから始め、クリック対象が増えてきたらRaycastへ移行すると理解しやすいでしょう。

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

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

スポンサーリンク