UnityのUIボタンが押しても反応しないときは、クリックがボタンに届くまでの道筋のどこかで止まっています。
uGUI(Unity UI)のボタンにクリックが届くには、次の部品がそろっている必要があります。
- シーンにEventSystemがあり、入力の設定に合った入力モジュールが付いている
- ボタンを含むCanvasにGraphic Raycasterが付いている
- ボタンの手前に、クリックを受け止めてしまう画像などが重なっていない
- ボタンの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の割り当て、スクリプトの登録 |
1. EventSystemがシーンにあるか
uGUIのドキュメントでは、EventSystemは入力にもとづいてイベントを送る仕組みで、どの入力モジュールを使うか、レイキャストをどう行うかを管理すると説明されています。
Hierarchyに EventSystem というゲームオブジェクトがあるかを確かめます。
無ければ、Hierarchyの右クリックメニューか GameObject メニューの UI (Canvas) → Event System で追加します。
Unity 6.6では、このメニューの名前は UI ではなく 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 Handling | EventSystemに付ける入力モジュール |
|---|---|
| Input Manager (Old) | Standalone Input Module |
| Input System Package (New) | Input System UI Input Module |
| Both | 使う入力の仕組みに合わせて、上のどちらか |
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 を押してから再生し直すと反応しました。

設定の切り替え方は、Input Systemの切り替え|Active Input Handlingで説明しています。
3. CanvasにGraphic Raycasterが付いているか
uGUIのドキュメントでは、Graphic Raycasterは、Canvasの上のどの部品にポインターが当たっているかを調べる部品と説明されています。
Graphic Raycasterが無いか、無効になっているCanvasでは、その上のボタンがクリックの対象として調べられません。
ボタンを含むCanvasを選び、InspectorにGraphic Raycasterがあるかを確かめます。
Graphic Raycasterのチェックを外して再生すると、ボタンをクリックしても反応しませんでした。
後で紹介する調査用のスクリプトも、「この位置にクリックを受け取る部品はありません」と出しました。

| Graphic Raycasterの項目 | 働き |
|---|---|
| Ignore Reversed Graphics | 裏を向いた部品を対象から外すか |
| Blocking Objects | クリックをさえぎる物として扱うオブジェクトの種類 |
| Blocking Mask | クリックをさえぎる物として扱うレイヤー |
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 | オフにすると、そのグループの部品はクリックをさえぎらない |
飾りの画像や、画面全体を覆う半透明の背景は、Raycast Targetをオフにしておくとクリックを邪魔しません。
練習用のシーンで、画面全体を覆う透明な画像(色のアルファが0)をHierarchyでボタンより下に置いて再生すると、ボタンは反応しませんでした。
調査用のスクリプトでは、一覧の先頭にその画像(Overlay)が出ました。
見えない画像でも、Raycast Targetがオンならクリックを受け止めます。
Raycast Targetをオフにすると、同じ位置のクリックでボタンの処理が動きました。

フェードの演出などでCanvasGroupを使っている場合は、終わった後もBlocks Raycastsがオンのまま画面を覆っていないかを確かめます。
Unity 6.6のInspectorでは、この項目は Blocks Raycasts と表示されていました。
同じ透明な画像にCanvasGroupを付けてBlocks Raycastsをオフにすると、画像のRaycast Targetがオンのままでも、クリックはボタンまで届きました。
5. ボタン自身の設定
Interactableがオンか
uGUIのドキュメントでは、Interactableをオフにすると操作を受け付けなくなり、見た目は無効の状態に切り替わると説明されています。
ボタンが灰色で表示されている場合は、ButtonのInteractableを確かめます。
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:Event System
- uGUI:Graphic Raycaster
- uGUI:Canvas(描画の順番)
- uGUI:Canvasコンポーネント
- uGUI:Image
- uGUI:Canvas Group
- uGUI:Button
- Unity 6.3 LTS:Runtime UI event system and input handling
- Input System 1.20:Understand UI system compatibility
- Input System 1.20:Handling input target ambiguity
uGUIの基本の設定は、Unity uGUIの基本設定7項目でまとめています。
