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

UnityでUIがクリックできない原因と対処法|Buttonが反応しない時のチェックリスト

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

はじめに

UnityでUIを作っていると、ほぼ確実に一度はぶつかるのが「ボタンが押せない問題」です。

・クリックしても何も起きない
・ホバー(色変化)すら反応しない
・特定のボタンだけ効かない

こういった状態になると、「どこが悪いのか分からない…」と手が止まってしまいますよね。

実はこの問題、原因が1つではなく、複数の設定が連動しているのがやっかいなポイントです。

  • EventSystem(入力の管理)
  • Canvas(UIの描画)
  • Raycast(クリック判定)
  • Buttonの設定

このどこか1つでも崩れると、UIは反応しなくなります。

ただし安心してください。
正しい順番でチェックすれば、ほとんどの場合は数分で原因を特定できます。

この記事では、

  • 最短で原因を特定するチェック方法
  • よくある原因と具体的な直し方
  • 再発しないための考え方

を、実務でよく使う判断基準とあわせて整理しています。

「なんとなく直す」ではなく、
「なぜ動かないのか」を理解して確実に解決するための内容です。


結論:まず最初に確認すべき5つ

時間をかけて原因を探す前に、まずはここを確認してみてください。
実務でも、この5つでほとんどのケースは解決できます。

  • EventSystemがシーンに存在しているか
  • CanvasにGraphic Raycasterが付いているか
  • Buttonの「Interactable」がONになっているか
  • ImageやTextの「Raycast Target」が正しく設定されているか
  • ボタンの前に透明なUI(Raycast blocker)が重なっていないか

特に重要なのが、「Raycast blocker(見えない遮蔽物)」の存在です。
見た目では分からないのにクリックできない場合、かなりの確率でこれが原因です。


まず判断するべきポイント

次の2つを確認するだけで、原因の方向性がほぼ分かります。

  • Hover(マウスを乗せたときの色変化)が起きるか
  • まったく反応がないか
状態考えられる原因
Hoverは効くがクリックできないButton設定(Interactableやイベント)の問題
Hoverすら効かないRaycast / EventSystem / UI重なりの問題

この切り分けができるだけで、無駄に全部調べる必要がなくなります。

「どこが悪いのか分からない状態」から、
「どの層に問題があるか分かる状態」に変えるのが最初の一歩です。




Unityでボタンが押せない原因は「4つの層」で考える

原因を1つずつバラバラに探していると、どうしても迷子になりがちです。
そんなときは、原因を「4つの層」に分けて考えると一気に整理できます。

UIが反応する仕組み

UnityのUIは、次の流れで動いています。

  1. Raycastで「どのUIに当たっているか」を判定する
  2. EventSystemがその情報を受け取る
  3. ButtonなどのUIがイベントを処理する

ここで大事なのは、見えているだけではクリックできないという点です。
Raycastが通らないと、イベント自体が届きません。

原因はこの4つに分類できる

ボタンが押せない原因は、ほぼ次の4つのどれかに当てはまります。

内容
システム層入力の管理EventSystemがない / Input設定ミス
描画層UIの描画と判定Graphic Raycasterがない
UI設定層個別UIの設定InteractableがOFF
遮蔽層クリックを遮る存在透明パネル / Textが前面

このように分類しておくと、

  • 「全部確認する」→「どの層かだけ見る」
  • 「なんとなく探す」→「論理的に切り分ける」

というふうに、デバッグの効率が大きく変わります。

実務でも、「まずどの層の問題か」を判断するだけで、解決までの時間がかなり短くなります。
ここを意識するだけでも、UIトラブルで詰まる回数はぐっと減ります。




よくある原因5選と解決方法

ここからは、実際によくある原因を「症状 → 原因 → 解決方法」の形で整理していきます。
上から順に確認していけば、ほとんどの場合どこかで原因に当たります。

EventSystemが存在しない・壊れている

症状
すべてのUIがまったく反応しない

原因
EventSystemがシーンに存在しない、またはInput Moduleが正しく設定されていない

解決方法

  • Hierarchyで「EventSystem」があるか確認
  • なければ「右クリック → UI → Event System」で追加
  • Input Moduleが適切か確認(旧Input or 新Input)

注意点
新Input Systemを使っている場合、「Input System UI Input Module」に変更しないと動かないことがあります

再発防止
UIを新規作成したときに自動生成されるEventSystemを削除しないようにする


Graphic Raycasterが無効になっている

症状
UIは表示されるが、すべてクリックできない

原因
CanvasにGraphic Raycasterが付いていない、または無効化されている

解決方法

  • Canvasを選択する
  • Inspectorで「Graphic Raycaster」があるか確認
  • なければ「Add Component」で追加
  • チェックが外れていたらONにする

注意点
複数Canvasがある場合、対象のCanvasを見落としやすいです

再発防止
UI用Canvasはテンプレート化して使い回すとミスが減ります


Raycast blockerに遮られている

症状
・Hoverすら反応しない
・一部のボタンだけ押せない

原因
ボタンの前に、透明なUIやテキストが重なってクリックを遮っている

解決方法

  • 前面にあるUIの「Raycast Target」をOFFにする
  • Hierarchy順を見直す(下にあるほど前面)
  • 不要なUIを削除する

注意点
TextMeshProのテキストもRaycastを持っています。見た目では気づきにくいので要注意です

再発防止
「クリックさせないUIはRaycast OFF」を習慣にすると防げます


Buttonの設定ミス

症状
Hoverは反応するがクリックしても何も起きない

原因
InteractableがOFF、またはOnClickイベントが未設定

解決方法

  • Buttonコンポーネントの「Interactable」をONにする
  • OnClickに処理が登録されているか確認
  • Imageコンポーネントが存在するか確認

注意点
見た目だけボタンでも、Imageがないとクリック判定が働かない場合があります

再発防止
ボタンはPrefab化して使い回すと設定漏れを防げます


Input SystemやTimeScaleの影響

症状
ポーズ中だけボタンが効かない

原因
Inputの更新タイミングがFixed Updateになっている

解決方法

  • Project Settings → Input System Packageを開く
  • Update Modeを「Dynamic Update」に変更する

注意点
Time.timeScale = 0のとき、FixedUpdateは停止します

再発防止
UI入力はUpdateベースで動かす設計にしておくと安定します




原因特定チェックリスト

上から順に確認していけば、3分以内に原因のあたりがつきます。
迷ったらこの順番でチェックしてみてください。

  • □ EventSystemがシーンに存在しているか
  • □ CanvasにGraphic Raycasterが付いているか
  • □ Hover(マウスを乗せたときの反応)があるか
  • □ 前面に透明なUI(Image / Text)が重なっていないか
  • □ ButtonのInteractableがONになっているか
  • □ Image / TextのRaycast Targetが適切か

チェックのコツ

効率よく原因を絞るために、次の考え方を使うとスムーズです。

  • Hoverが反応する → Raycastは通っている → Button設定を疑う
  • Hoverが反応しない → RaycastかEventSystemの問題
  • 一部だけ反応しない → 前面UIや重なりを疑う

特に「一部だけ動かない」場合は、かなり高い確率で
見えないUIが前に重なっているケースです。

順番を守って確認するだけで、無駄な試行錯誤を減らせます。




デバッグ最短ルート:pointerEnterで原因を特定する

原因が分からないときに一番早い方法が、EventSystemのpointerEnterを確認することです。
実務でもかなり頼りになるデバッグ方法です。

pointerEnterの確認手順

  1. ゲームを再生(Play)する
  2. Hierarchyで「EventSystem」を選択
  3. Inspectorを表示する
  4. マウスカーソルをボタンの上に乗せる
  5. 「pointerEnter」の項目を見る

この「pointerEnter」に表示されるオブジェクトが、
実際にクリック対象として認識されているUIです。


結果の見方

表示内容意味対処
ボタンが表示される正常にRaycastが通っているButton設定を確認
別のUIが表示されるクリックが遮られているRaycast TargetをOFF
何も表示されないRaycastが機能していないRaycasterやEventSystemを確認

よくある実例

例えばこんなケースがあります。

  • ボタンの上にTextMeshProのテキストが重なっている
  • 透明なパネル(Image)が前面にある
  • UIの並び順が意図と逆になっている

この場合、pointerEnterにはボタンではなく、
前面にある別のUIが表示されます。

つまり、「どれが邪魔しているか」が一瞬で分かるんですね。


判断基準としての使い方

この方法の強いところは、「原因の層」を即判断できることです。

  • 違うオブジェクト → 遮蔽層の問題
  • 何もなし → 描画層 or システム層の問題
  • 正しいが動かない → UI設定層の問題

感覚ではなく、確実に原因を特定できるのがポイントです。

UIトラブルで時間を溶かさないためにも、この方法はぜひ覚えておきたいテクニックです。




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

UIトラブルが長引く原因の多くは、「思い込み」にあります。
ここでは特につまずきやすいポイントを整理しておきます。

表示されている=クリックできるではない

見えているUIが押せないと、「バグかな?」と思いがちですが、実際はそうとは限りません。

UnityのUIはRaycastが当たったものだけがクリック対象になります。

  • 見えている → 描画されているだけ
  • クリックできる → Raycastが通っている

この違いを理解していないと、原因を見誤りやすくなります。


Textはクリックを通すと思っている

テキストはただの表示と思われがちですが、実はRaycast判定を持っています

特にTextMeshProは、初期状態でRaycast TargetがONになっていることが多いです。

その結果、

  • ボタンの上にテキストを置く
  • クリックがテキストで止まる
  • ボタンが反応しない

という状態になります。

クリック不要なテキストは、Raycast TargetをOFFにするのが基本です。


EventSystemは勝手に動くものではない

EventSystemがあるだけで動くと思われがちですが、
実際にはInput Moduleとの組み合わせが重要です。

  • 旧Input → Standalone Input Module
  • 新Input → Input System UI Input Module

ここが一致していないと、UIは反応しません。


Hierarchy順は見た目だけの問題ではない

Hierarchyの順番は、単なる整理ではなく描画順=クリック優先順位に影響します。

  • 下にあるオブジェクトほど前面に表示される
  • 前面のUIがクリックを受け取る

つまり、意図せず前に来ているUIがあると、それだけでクリックが遮断されます。


TimeScaleはUIに影響しないとは限らない

「UIはTime.timeScaleの影響を受けない」と思われがちですが、条件によっては影響を受けます。

特にInput Systemの設定によっては、

  • Time.timeScale = 0
  • FixedUpdateベースの入力

この組み合わせで、UI入力が止まることがあります。

UIが効かない場合は、入力更新の仕組みも確認しておくと安心です。




実務での判断基準

設定を一つひとつ確認するだけでも解決できますが、
実務では「どこを見るべきか」を瞬時に判断できるかが重要になります。

ここでは、実際に現場でよく使う判断基準を紹介します。

Hoverが効くかどうかで切り分ける

まず最初に見るべきポイントです。

状態判断
Hoverが効くRaycastは通っている → Button設定の問題
Hoverが効かないRaycastまたはEventSystemの問題

これだけで、原因の範囲をかなり絞れます。


pointerEnterが正しいかを見る

次に確認するのが、EventSystemのpointerEnterです。

  • 想定通りのボタン → 正常
  • 別のUI → 遮蔽物あり
  • 何もなし → Raycast不具合

ここで「何がクリック対象になっているか」が分かります。


一部だけ動かない場合の考え方

すべてではなく「特定のボタンだけ動かない」場合は、原因はかなり限定されます。

  • その周囲にUIが重なっている
  • そのボタンだけ設定が違う

この2つを重点的に見れば、無駄な調査を減らせます。


Canvasが複数ある場合の注意点

複数のCanvasを使っていると、見た目と実際の優先順位がズレることがあります。

  • Sort Orderが高いCanvasが前面に来る
  • 別CanvasのUIがクリックを奪うことがある

特にポップアップやメニューUIを重ねている場合は要注意です。


正常な状態の目安

迷ったときは、次の状態になっていれば「正常」と判断できます。

  • Hoverが正しく反応する
  • pointerEnterが意図したUIを指している
  • クリックでイベントが実行される

この3つが揃っていれば、UI入力の流れは問題ありません。

逆にどれか1つでも欠けている場合は、今回解説した4つの層のどこかに原因があります。




Input SystemとUIの関係

UIが反応しない原因として、見落とされがちなのが「Input Systemの設定」です。
特に最近のUnityでは、新旧Input Systemの違いで挙動が変わることがあります。

旧Inputと新Inputの違い

項目旧Input System新Input System
モジュールStandalone Input ModuleInput System UI Input Module
特徴シンプルで従来仕様柔軟で拡張性が高い
注意点新機能には非対応設定ミスでUIが動かないことがある

新Input Systemを使っている場合、対応するUIモジュールに変更されているかが重要です。


よくある設定ミス

  • Input Systemを有効にしたのに、Standalone Input Moduleのまま
  • UI Input Moduleに置き換えていない
  • Input Actionsが未設定

この状態だと、見た目は正常でもUIが反応しません。


設定の確認手順

  1. EventSystemを選択する
  2. InspectorでInput Moduleを確認する
  3. 新Inputなら「Input System UI Input Module」にする

もし迷った場合は、一度削除してから再作成すると直ることもあります。


Input Systemが原因か判断するポイント

  • UIがまったく反応しない
  • EventSystemは存在している
  • Raycastも問題なさそう

この条件が揃っている場合、Input Systemの設定を疑う価値があります。

より詳しい原因別の対処については、こちらも参考になります。




学習を効率化したい人へ

UIまわりのトラブルは、「その場で直す」だけだと何度も繰り返しがちです。
一度しっかり構造から理解しておくと、今後の開発がかなり楽になります。

特に次のような人は、体系的に学んでおくと効果が出やすいです。

  • 毎回UIトラブルで時間がかかる
  • なんとなく設定している
  • InputやEventの仕組みがあいまい

基礎からしっかり理解したい場合は、書籍で一度通して学ぶのもおすすめです。

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

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

「なんとなく動く」から「理由が分かって直せる」状態になると、開発スピードは一気に上がります。


まとめ

ボタンが押せない問題は難しそうに見えますが、原因はある程度パターン化されています。

まずは次の順番で確認するのが近道です。

  • EventSystemがあるか
  • Raycasterが有効か
  • Hoverが反応するか
  • Raycast blockerがないか
  • Button設定が正しいか

そして一番大事なのは、原因を「4つの層」で考えることです。

  • システム(EventSystem / Input)
  • 描画(Canvas / Raycaster)
  • UI設定(Button / Image)
  • 遮蔽(Raycast blocker)

この視点があるだけで、「なんとなく探す状態」から抜け出せます。

実際の開発では、

  • Hoverが効くか
  • pointerEnterが何を指しているか

この2つを確認するだけでも、かなりの確率で原因にたどり着けます。

UIトラブルは一度しっかり理解しておくと、今後ほとんど詰まらなくなります。
経験を積むほど、「あ、これRaycastだな」とすぐ分かるようになりますよ。


よくある質問(FAQ)

Q
ButtonのOnClickを設定しているのに動かないのはなぜ?
A

この場合、処理自体ではなくクリックがボタンまで届いていない可能性が高いです。

  • Raycast blocker(透明UIやテキスト)が前にある
  • Raycast Targetの設定ミス
  • Graphic Raycasterが無効

Hoverが反応するかどうかで切り分けると、原因を特定しやすくなります。

Q
一部のボタンだけ反応しないのはなぜ?
A

この場合はほぼ確実に、そのボタン周辺に問題があります

  • 前面に別のUIが重なっている
  • そのボタンだけInteractableがOFF
  • Raycast Targetの設定が違う

特に多いのが「見えないUIが前にある」ケースです。
pointerEnterを確認するとすぐに分かります。

Q
ポーズ中(Time.timeScale = 0)でもUIを動かすには?
A

Input Systemの設定によっては、ポーズ中にUI入力が止まることがあります。

  • InputのUpdate Modeを「Dynamic Update」にする
  • FixedUpdate依存の設定を避ける

UIは基本的にUpdateベースで動く設計にしておくと安定します。

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

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

スポンサーリンク