こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • 突然Unityのボタンが反応しなくなった
  • 直し方がわからない...
  • 考えられる原因を知りたい
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    Unity UI(uGUI)の ボタンが反応しなくなる ことありませんか?オオバも長年UIを作ってきていますが、よく押せなくなります。とても困りますよね。

    結論から言って uGUIのボタンが押せなくなったときに考えられる原因は大きく分けて8つ です。「ボタンが押せない」というのはゲーム開発にとっては致命的な不具合。ぜひこの記事をとおして原因を探ってみてください。

    👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

    Unity UIのボタンが反応しない原因は8つ

    この記事では8つの原因を分かりやすく解説していきます。この8項目を全てチェックしてもらえれば再びボタンは動き出すでしょう。

    また経験的に 発生頻度の高いもの から順にランキング形式紹介します。ボタンが反応しなくなって困っている方はぜひ読んでみてください。では1つずつ詳細について解説していきます。

    👉 【要注意Unity UI】Unity標準ボタンを禁止する5つの理由

    第1位 RaycastTargetがOFFではないか?

    ボタンが押せない原因の中で最も多いのは「 RaycastTarget設定漏れ 」です。そもそも「RaycastTarget」とは、ボタンの判定に必要な設定です。ボタンが反応してほしいときにはチェックを。反応してほしくない場合はチェックを外します。

    RaycastTargetは ImageRawImageTextTextMeshPro など ボタンになりうるコンポーネント で設定できます。つまり ボタンが押せないときはRaycastTargetにチェックが入っているか確認 することから始めましょう。

    各コンポーネントのRaycastTargetの場所

    各コンポーネントのRaycastTargetの設定箇所を紹介します。

    ImageコンポーネントのRaycastTarget設定箇所

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_0

    RawImageコンポーネントのRaycastTarget設定箇所

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_1

    TextコンポーネントのRaycastTarget設定箇所

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_2

    TextMeshProコンポーネントのRaycastTarget設定箇所

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_3

    TextMeshProのRaycastTargetはデフォルト状態で Extra Settings の中に隠れています。クリックしてExtra Settingsを開き、RaycastTargetを確認してみてください。

    ボタンが反応しないときは、まずこれらのRaycastTargetにチェックが入っているかを確認しましょう。

    第2位 ボタンの上に覆いかぶさるUIがないか?

    2つ目に考える原因は反応しないボタンの上に 透明なUIが覆いかぶさっていないか です。よくある原因のひとつ。

    以下のように RaycastTarget がONのUIが覆いかぶさっているとボタンは反応しません。 覆いかぶさったUIにクリック判定が取られてしまうから です。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_4

    ※分かりやすく覆いかぶさるUIを半透明にしています

    RaycastTargetについては前述の第1位 RaycastTargetがOFFではないか?をチェックしてみてください。

    Hierarchyウィンドウ上では以下のような状況です。ここでは覆いかぶさるUIが「BlockUI」という名前のGameObjectです。 Hierarchyウィンドウでは下に行くほど後から描画 されるため、結果、BlockUIはボタンを覆う形になります。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_5

    上のサンプルは分かりやすく説明するためシンプルな図解です。実際のゲーム開発の現場では 大量のGameObjectがHierarchyウィンドウに入り乱れます 。大量のGameObjectの中から原因を特定するのは難しいですよね。

    そこで簡単に解決へ導くテクニックを紹介します。

    EventSystemのInspectorウィンドウにヒントがある

    Hierarchyウィンドウから EventSystem を選択します。「EventSystem」はUnity UIを使う場合必ず自動で作られます。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_6

    EventSystemのInspectorウィンドウを見てみましょう。マウスカーソルのUI情報が取得できるのです。

    ボタンが反応するときのEventSystem

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_7

    ボタンをクリックすると、EventSystemの情報に変化が現れます。注目すべきは Current Raycast です。クリックを判定したUIのGameObject名が表示されます。(マウスオーバーも判定されています)

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_8

    ボタンをブロックするUIが覆いかぶさったときのEventSystem

    一方ボタンを覆いかぶさるUIがある場合EventSystemはどうなるでしょうか。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_9

    先ほどと同様に Current Raycast をチェックします。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_10

    BlockUI が表示されています。このようにEventSystemを使うとボタンが反応しない原因がわかります。このサンプルでは「BlockUI」が邪魔していました。

    ボタンが反応しないときはぜひEventSystemのInspectorウィンドウをチェック してみてください。

    第3位 ButtonのInteractableがOFFではないか?

    ボタンが反応しない3つ目の原因は「InteractableのOFF」です。Unity標準のButtonコンポーネントを使っている場合の話ですが、Buttonは Interactableにチェック を入れないと反応しません。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_11

    RaycastTargetをONにしていてもInteractableにチェックがないとボタンは反応しないため注意です。

    第4位 OnClickの設定はあるか?

    4つ目の原因もUnity標準のButtonを使用していた場合の話です。 OnClick の設定漏れです。

    「OnClick」にはボタンをクリックしたときの処理(メソッド)を設定します。この設定がないとボタンは動きません。

    InspectorウィンドウからOnClickを設定した場合

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_12

    プログラムからOnClickを設定した場合

    var clickedEvent = new Button.ButtonClickedEvent();  
    clickedEvent.AddListener(() => Debug.Log("クリック!"));  
    // ボタンにクリック処理を設定  
    button.onClick = clickedEvent;  
    

    Inspectorウィンドウ、プログラムどちらでもよいですが、どこかでOnClickを設定してあるか確認してみましょう。

    第5位 EventSystemはあるか?

    ボタンが反応しない5つ目の原因は 「EventSystemの有無」 です。
    Unity UIには必ずEventSystemが必要です。自動で1つ作られますが、間違えて消してしまうこともあります。HierarchyウィンドウにEventSystemがあるか確認してみましょう。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_13

    EventSystemがない場合に新規で作成する方法

    間違えてEventSystemを消してしまった場合、新たに作りましょう。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_14

    メニュー GameObject > UI > Event System から作成できます。

    EventSystemがないとボタンは動きません。ちょっとしたUnity誤操作で消えてしまいますので注意しましょう。

    第6位 GraphicRaycasterはあるか?

    ボタンが反応しない6つ目の原因は 「GraphicRaycasterの有無」 です。通常GraphicRaycasterはCanvasとセットで作られます。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_15

    GraphicRaycasterはタップやクリック判定を処理するコンポーネントです。ボタンを反応させるために必須です。

    Canvas単位でGraphicRaycasterが必要

    開発上Canvasの中にCanvasを作ることがあります。注意点は GraphicRaycasterのつけ忘れ です。
    次の資料はGraphicRaycasterの有無でクリック判定の変化を図にしたものです。

    Canvas_AはGraphicRaycasterあり・Canvas_BはGraphicRaycaster無し

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_16

    ↑このようにCanvas単位でクリック判定が管理されるのです。ボタンが反応しないときは CanvasとGraphicRaycasterの有無をチェック してみましょう。

    GraphicRaycasterはONである必要がある

    GraphicRaycaster はCanvasにアタッチされていてもアクティブな状態(ON)である必要があります。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_17

    上図の通り GraphicRaycasterにチェックが入った状態か確認 しましょう。チェックが外れているとボタンは反応しません。

    第7位 CanvasGroupのBlocksRaycastsがOFFではないか?

    8つ目の原因は CanvasGroupのBlocksRaycasts です。
    CanvasGroupは子階層のUIをグループ化して 透明度を一括変更 できる便利コンポーネントです。そんなCanvasGroupの BlocksRaycasts にチェックが入っているか確認しましょう。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_18

    上図のようにCanvasGroupの BlocksRaycasts がONであればボタンは反応します。

    第8位 CanvasGroupのInteractableがOFFではないか?

    第7位 CanvasGroupのBlocksRaycastsがOFFではないか?に続いてCanvasGroupについてです。8つ目の原因は CanvasGroupのInteractable
    Unity標準ボタンを使っていた場合の話ですが、CanvasGroupの Interactable にチェックが入っているか確認しましょう。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_19

    CanvasGroupの Interactable がOFFだとUnity標準ボタンは反応しません。必ず上図のとおりONにしましょう。

    第9位 ボタンが裏返っている

    実はボタンには表と裏が存在することをご存知でしょうか。裏返っているとタップ判定が消滅します。
    ここで言う「裏返り」とは X軸またはY軸が180度回転した状態 を指します。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_20

    X軸が180度回転した状態。

    【Unity UI】ボタンが反応しない原因をランキング形式で紹介【保存版】_21

    Y軸が180度回転した状態。

    この状態では、、いくらタップしようとしても判定が取れません。
    もしボタンが動作しなくなったときの原因の1つとして検討してみてください。

    Unity UIのボタンが反応しない8つの原因まとめ

    Unity UIのボタンが反応しない8つの原因を発生度にもとづくランキング形式で紹介しました。

    Unity UIボタンが反応しないランキング

    第1位 RaycastTargetがOFFではないか?

    第2位 ButtonのInteractableがOFFではないか?

    第3位 ボタンの上に覆いかぶさるUIがないか?

    第4位 OnClickの設定はあるか?

    第5位 EventSystemはあるか?

    第6位 GraphicRaycasterはあるか?

    第7位 CanvasGroupのBlocksRaycastsがOFFではないか?

    第8位 CanvasGroupのInteractableがOFFではないか?

    第9位 ボタンが裏返っている

    こんな感じです。

    ボタンが動かなくなると焦りますよね。特に商品の課金ボタンが動かないとなると汗ダラダラです。
    この記事ではUnity開発11年の中で、 ボタンが反応しない原因を全てリストアップ しました。

    もしあなたのゲームのボタンが反応しないとき、この記事をブックマークして思い出してみてください。きっとなにか解決のヒントになるはずです。

    この記事があなたのゲーム開発に少しでもお役に立てたら嬉しいです。

    「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
    ぜひチャンネル登録をお願いします!

    最後まで読んでいただきありがとうございました!
    すばらしいUIライフをお過ごしください。

    オススメ記事
    検証環境