Amazon10/19まで!プライム感謝祭開催中!セール会場へ

UnityのUIボタンが反応しない原因と対処法|EventSystem・Raycast・入力設定

UnityのUIボタンが反応しない原因と対処法

UnityのUIボタンが押しても反応しないときは、クリックがボタンに届くまでの道筋のどこかで止まっています。

uGUI(Unity UI)のボタンにクリックが届くには、次の部品がそろっている必要があります。

  1. シーンにEventSystemがあり、入力の設定に合った入力モジュールが付いている
  2. ボタンを含むCanvasにGraphic Raycasterが付いている
  3. ボタンの手前に、クリックを受け止めてしまう画像などが重なっていない
  4. ボタンのInteractableがオンで、On Clickに処理がつながっている

この記事では、この順番で確かめる場所を説明します。

説明の根拠は、Unity 6.3 LTSの公式マニュアルと、uGUI 2.0とInput System 1.20のパッケージのドキュメントの記載(2026年10月18日に確認)です。

画面は、Unity 6.6(6000.6.5f1、uGUI 2.6.0、Input System 1.20.0)の練習用プロジェクトで、2026年10月20日に撮影しました。

EventSystemが無い場合、入力モジュールが設定と合わない場合、Graphic Raycasterが無効な場合、手前に透明な画像がある場合、Interactableがオフの場合は、uGUIのボタンを再生してクリックし、反応しないことを確かめています。

World SpaceのCanvasでのクリック、Blocking Objects、親のCanvasGroupのInteractable、Inspectorで割り当てたOn Click、IsPointerOverGameObject、UI Toolkitの節の内容は確かめていません。

画面の名前は英語版の表記です。

UI Toolkitで作ったボタンの場合は、最後の節を見てください。

目次

症状から確かめる場所を選ぶ

症状まず確かめる場所
どのボタンも反応しないEventSystemと入力モジュール、Active Input Handling
特定のCanvasのボタンだけ反応しないそのCanvasのGraphic Raycaster、Render Mode、Event Camera
一部のボタンだけ反応しない手前に重なった画像のRaycast Target、CanvasGroup
ボタンの色が灰色で反応しないButtonのInteractable、親のCanvasGroupのInteractable
色は変わるが処理が動かないOn Clickの割り当て、スクリプトの登録
uGUI 2.0のドキュメントをもとに編集部で整理

1. EventSystemがシーンにあるか

uGUIのドキュメントでは、EventSystemは入力にもとづいてイベントを送る仕組みで、どの入力モジュールを使うか、レイキャストをどう行うかを管理すると説明されています。

Hierarchyに EventSystem というゲームオブジェクトがあるかを確かめます。

無ければ、Hierarchyの右クリックメニューか GameObject メニューの UI (Canvas) → Event System で追加します。

Unity 6.6では、このメニューの名前は UI ではなく UI (Canvas) でした。

GameObjectメニューのUI (Canvas)を開いた画面。Image、Button - TextMeshPro、Toggle、Raycast Receiver、Canvas、Event System、Legacyなどが並んでいる
2026-10-20 撮影。Unity 6.6(6000.6.5f1、uGUI 2.6.0、Input System 1.20.0)、Windows 11。GameObjectメニューのUI (Canvas)。Event Systemはこの中にあります。Hierarchyの右クリックメニューにも同じUI (Canvas)があります

Unityのマニュアルでは、シーンに最初のuGUIの部品を置いたときに、EventSystemと入力モジュールが自動で追加されると説明されています。

空のシーンで UI (Canvas) → Legacy → Button を選ぶと、CanvasとEventSystemが一緒に作られ、EventSystemには Input System UI Input Module が付いていました。

後からEventSystemだけを消した場合や、別のシーンからCanvasだけをコピーした場合は、無くなっていることがあります。

EventSystemのゲームオブジェクトを無効にして再生すると、ボタンをクリックしても色が変わらず、On Clickの処理も動きませんでした。

入力モジュールを外したEventSystemのInspectorには、Add Default Input Modules というボタンが表示されました。

uGUIのドキュメントでは、入力モジュールは一度に1つだけが有効で、EventSystemと同じゲームオブジェクトに付ける必要があるとされています。

2. 入力モジュールがActive Input Handlingと合っているか

Unityの入力の仕組みには、古いInput Managerと、新しいInput Systemパッケージがあります。

どちらを使うかは、Edit → Project Settings → Player の Other Settings にある Active Input Handling で決まります。

EventSystemに付ける入力モジュールは、この設定に合わせます。

Active Input HandlingEventSystemに付ける入力モジュール
Input Manager (Old)Standalone Input Module
Input System Package (New)Input System UI Input Module
Both使う入力の仕組みに合わせて、上のどちらか
Unity 6.3 LTSの公式マニュアル「Runtime UI event system and input handling」をもとに作成

Unity 6.6のPlayerの設定でも、Active Input Handlingの選択肢は Input Manager (Old)、Input System Package (New)、Both の3つでした。

Input Systemのドキュメントでは、uGUIでInput Systemを使う場合は、常にInput System UI Input Moduleが必要とされています。

古いStandalone Input Moduleが付いたままで、Input Systemが入っている場合は、Inspectorにそれを新しいモジュールへ置き換えるボタンが表示されると説明されています。

Active Input HandlingがInput System Package (New)のプロジェクトで、EventSystemにStandalone Input Moduleを付けて確かめました。

Inspectorには赤い警告と Replace with InputSystemUIInputModule のボタンが表示され、再生中はConsoleに InvalidOperationException が出続けました。

ボタンをクリックしても処理は動かず、Replace with InputSystemUIInputModule を押してから再生し直すと反応しました。

EventSystemに付けたStandalone Input ModuleのInspector。古いInputManagerを使うモジュールなので動かないという赤い警告と、Replace with InputSystemUIInputModuleのボタンが出ている。下のConsoleには再生中のInvalidOperationExceptionが並んでいる
2026-10-20 撮影。Unity 6.6(6000.6.5f1、uGUI 2.6.0、Input System 1.20.0)、Windows 11。Active Input HandlingがInput System Package (New)のプロジェクトで、Standalone Input Moduleを付けて再生した結果。ボタンを押しても反応せず、Consoleに例外が出続けました

設定の切り替え方は、Input Systemの切り替え|Active Input Handlingで説明しています。

3. CanvasにGraphic Raycasterが付いているか

uGUIのドキュメントでは、Graphic Raycasterは、Canvasの上のどの部品にポインターが当たっているかを調べる部品と説明されています。

Graphic Raycasterが無いか、無効になっているCanvasでは、その上のボタンがクリックの対象として調べられません。

ボタンを含むCanvasを選び、InspectorにGraphic Raycasterがあるかを確かめます。

Graphic Raycasterのチェックを外して再生すると、ボタンをクリックしても反応しませんでした。

後で紹介する調査用のスクリプトも、「この位置にクリックを受け取る部品はありません」と出しました。

CanvasのGraphic Raycasterのチェックを外した状態と、再生中にボタンをクリックしたときのConsole。記事の調査用スクリプトが「この位置にクリックを受け取る部品はありません」と出している
2026-10-20 撮影。Unity 6.6(6000.6.5f1、uGUI 2.6.0、Input System 1.20.0)、Windows 11。Graphic Raycasterを無効にしたCanvasでボタンをクリックした結果。ボタンは反応せず、調査用スクリプトにも部品が1つも見つかりませんでした
Graphic Raycasterの項目働き
Ignore Reversed Graphics裏を向いた部品を対象から外すか
Blocking Objectsクリックをさえぎる物として扱うオブジェクトの種類
Blocking Maskクリックをさえぎる物として扱うレイヤー
uGUI 2.0のドキュメント「Graphic Raycaster」をもとに作成

Blocking Objectsで2Dや3Dのオブジェクトを指定していると、UIの手前にあるそれらのオブジェクトがクリックをさえぎります。

CanvasのRender Modeも確かめる

uGUIのドキュメントでは、CanvasのRender ModeがWorld Spaceのとき、UIのイベントの処理に使うカメラをEvent Cameraで指定すると説明されています。

World SpaceのCanvasのボタンが反応しない場合は、Event Cameraに今の画面を映しているカメラが入っているかを確かめます。

Unity 6.6でRender ModeをWorld Spaceにすると、Event Cameraが空のままでは、UIのイベントを正しく受け取れないことがあるという警告がInspectorに表示されました。

uGUIのドキュメントでは、Canvasには、UIのイベントをそのCanvasで処理するかを決める Receives Events という項目もあるとされています。

Unity 6.6のCanvasのInspectorでは、Render ModeがScreen Space - OverlayのときもWorld Spaceのときも、この項目は表示されませんでした。

4. 手前の画像がクリックを受け止めていないか

ボタンの上に透明な画像やパネルが重なっていると、クリックがそちらに当たり、ボタンまで届きません。

uGUIのドキュメントでは、同じCanvasの中の部品はHierarchyの順に描画され、重なったときは後にあるものが手前に出ると説明されています。

Hierarchyでボタンより下にある画像が、ボタンと重なっていないかを確かめます。

設定クリックを通すには
ImageのRaycast Targetオフにすると、その画像はクリックの対象にならない
CanvasGroupのBlocks Raycastsオフにすると、そのグループの部品はクリックをさえぎらない
uGUI 2.0のドキュメント(Image・Canvas Group)をもとに作成

飾りの画像や、画面全体を覆う半透明の背景は、Raycast Targetをオフにしておくとクリックを邪魔しません。

練習用のシーンで、画面全体を覆う透明な画像(色のアルファが0)をHierarchyでボタンより下に置いて再生すると、ボタンは反応しませんでした。

調査用のスクリプトでは、一覧の先頭にその画像(Overlay)が出ました。

見えない画像でも、Raycast Targetがオンならクリックを受け止めます。

Raycast Targetをオフにすると、同じ位置のクリックでボタンの処理が動きました。

左はHierarchyでボタンの後に置いた透明なOverlayと、そのImageのRaycast Targetがオンの状態。ConsoleにはOverlay、Text (Legacy)、Button (Legacy)の順で出て、ボタンの処理は動いていない。右はRaycast Targetをオフにした後で、Consoleに「ボタンが押されました」が出ている
2026-10-20 撮影。Unity 6.6(6000.6.5f1、uGUI 2.6.0、Input System 1.20.0)、Windows 11。画面全体を覆う透明な画像(Overlay)をボタンの手前に置いて比べました。Raycast Targetがオンだとクリックは先頭のOverlayに当たり、オフにするとボタンまで届きました

フェードの演出などでCanvasGroupを使っている場合は、終わった後もBlocks Raycastsがオンのまま画面を覆っていないかを確かめます。

Unity 6.6のInspectorでは、この項目は Blocks Raycasts と表示されていました。

同じ透明な画像にCanvasGroupを付けてBlocks Raycastsをオフにすると、画像のRaycast Targetがオンのままでも、クリックはボタンまで届きました。

5. ボタン自身の設定

Interactableがオンか

uGUIのドキュメントでは、Interactableをオフにすると操作を受け付けなくなり、見た目は無効の状態に切り替わると説明されています。

ボタンが灰色で表示されている場合は、ButtonのInteractableを確かめます。

Interactableをオフにして再生すると、ボタンは灰色になり、クリックしてもOn Clickの処理は動きませんでした。

調査用のスクリプトの一覧にはボタンが出たので、クリック自体はボタンまで届いています。

ButtonのInteractableのチェックを外して再生した画面。ボタンは灰色になり、クリックしてもConsoleには調査用スクリプトのText (Legacy)とButton (Legacy)だけが出て、ボタンの処理の文字は出ていない
2026-10-20 撮影。Unity 6.6(6000.6.5f1、uGUI 2.6.0、Input System 1.20.0)、Windows 11。Interactableをオフにしたボタン。灰色で表示され、クリックはボタンまで届いていますが、On Clickの処理は動きませんでした

親にCanvasGroupがあり、そのInteractableがオフの場合も、グループの中の部品は操作できなくなります。

On Clickに処理がつながっているか

uGUIのドキュメントでは、On Clickは、ボタンを押して離したときに呼ばれるイベントと説明されています。

押したままポインターをボタンの外へ動かしてから離すと、処理は動きません。

練習用のシーンでも、ボタンの上で押してから下へ動かして離すと、ボタンの処理は動きませんでした。

ボタンの見た目は押した色に変わるのに何も起きない場合は、On Clickに処理が入っているかを確かめます。

Inspectorで割り当てた場合は、On Clickの欄に、処理を持つオブジェクトと関数名が入っているかを見ます。

スクリプトから割り当てる場合は、onClick.AddListener を使います。

using UnityEngine;
using UnityEngine.UI;

public class StartButton : MonoBehaviour
{
    [SerializeField] Button button;

    void Start()
    {
        button.onClick.AddListener(OnClick);
    }

    void OnClick()
    {
        Debug.Log("ボタンが押されました");
    }
}

Consoleに文字が出れば、クリックはボタンまで届いています。

このスクリプトを空のゲームオブジェクトに付け、Buttonの欄にボタンを割り当てて再生すると、クリックで「ボタンが押されました」と出ました(練習では割り当てをエディタ拡張のスクリプトで行いました)。

文字が出るのに目的の処理が動かない場合は、ボタンではなく、呼び出した先の処理を調べます。

クリックした位置に何があるかを調べる

どの部品がクリックを受け止めているか分からない場合は、EventSystemのRaycastAllで、クリックした位置にある部品を一覧にできます。

次のスクリプトを空のゲームオブジェクトに付けて再生し、ボタンをクリックすると、その位置にある部品の名前が手前から順にConsoleへ出ます。

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
#if ENABLE_INPUT_SYSTEM
using UnityEngine.InputSystem;
#endif

public class UIClickProbe : MonoBehaviour
{
    readonly List<RaycastResult> results = new List<RaycastResult>();

    void Update()
    {
        if (EventSystem.current == null)
        {
            Debug.LogWarning("シーンにEventSystemがありません");
            enabled = false;
            return;
        }

#if ENABLE_INPUT_SYSTEM
        if (Mouse.current == null || !Mouse.current.leftButton.wasPressedThisFrame) return;
        Vector2 position = Mouse.current.position.ReadValue();
#else
        if (!Input.GetMouseButtonDown(0)) return;
        Vector2 position = Input.mousePosition;
#endif

        var data = new PointerEventData(EventSystem.current) { position = position };
        results.Clear();
        EventSystem.current.RaycastAll(data, results);

        if (results.Count == 0)
        {
            Debug.Log("この位置にクリックを受け取る部品はありません");
            return;
        }
        foreach (var r in results)
        {
            Debug.Log(r.gameObject.name, r.gameObject);
        }
    }
}

このコードは、uGUIとInput Systemのスクリプトリファレンスに載っているEventSystem.RaycastAll、PointerEventData、Mouse.currentをもとにしたものです。

Unity 6.6で、Active Input HandlingがInput System Package (New)のプロジェクトに付けて再生し、ボタンをクリックすると、Text (Legacy)、Button (Legacy)の順に名前が出ました。

EventSystemを無効にしたシーンでは、再生した直後に「シーンにEventSystemがありません」の警告が出ました。

エディタでは、Gameビューの外(Consoleなど)をクリックしたときにも「この位置にクリックを受け取る部品はありません」が出ることがあったので、Gameビューの中をクリックした行だけを見ます。

Active Input HandlingがInput Manager (Old)の場合の書き方(#else の側)は確かめていません。

一覧の先頭がボタン以外の部品なら、その部品のRaycast Targetやその親のCanvasGroupを見直します。

何も出ない場合は、Graphic RaycasterやRender Modeの設定に戻ります。

ボタンとゲームの操作が両方動いてしまうとき

反応しないのとは逆に、ボタンを押したときにゲーム側の操作まで動いてしまうことがあります。

Input Systemのドキュメントでは、UIとそれ以外の処理が同じクリックを受け取るのを自動で防ぐ仕組みはないと説明されています。

対処として、ゲーム側の入力をUpdateの中で調べ、EventSystem.IsPointerOverGameObject でポインターがUIの上にあるかを確かめる方法が案内されています。

同じドキュメントでは、InputActionのperformedなどのコールバックの中からIsPointerOverGameObjectを呼ぶと警告が出るとされています。

UI Toolkitのボタンが反応しない場合

UI Toolkitは、uGUIとは別の仕組みで入力を受け取ります。

Unityのマニュアルでは、再生を始めるとUI Toolkitが既定のイベントシステムを自動で作るため、UI Toolkitだけのシーンでは、シーンにEventSystemを置く必要はないとされています。

Input Systemのドキュメントでも、UI Toolkitはレイキャストを内部で処理し、Graphic Raycasterのような部品は要らないと説明されています。

uGUIと同じシーンで使う場合は、uGUIと同じく、EventSystemと入力の設定に合った入力モジュールが必要です。

Input Systemのドキュメントによると、UI Toolkitのボタンで RegisterCallback<ClickEvent> を使うと、ゲームパッドの決定ボタンでは処理が呼ばれません。

ゲームパッドでも反応させたい場合は、clicked に処理をつなぎます。

UI Toolkitでのボタンの作り方は、Unity UI Toolkitの使い方で説明しています。

参考にした公式ページ

uGUIの基本の設定は、Unity uGUIの基本設定7項目でまとめています。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

Unityのおすすめ書籍

開発PCの選び方

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次