Unityでゲームを制作中にクリック検知を実装するとき、何が必要か分からなくなったり忘れたりしがちなので、まとめておきます。
1. UIに対するクリック検知
仕組み
- UnityのUI(ButtonやImageなど)は Canvas 上で描画され、イベント検知には EventSystem が必要です。
- IPointerClickHandler や Unity UI のデフォルト機能(ButtonのOnClickなど)を利用します。
必要な設定
- Canvas を作成:
- UI要素を配置するために
Canvas
が必要です。
- UI要素を配置するために
- EventSystem の確認:
- シーンに
EventSystem
が存在することを確認します。 - 存在しない場合は、
Hierarchy > 右クリック > UI > EventSystem
から追加可能。
- シーンに
- UI要素の設定:
- UI要素(Buttonなど)には Graphic Raycaster が必要です(Canvasに自動で設定されます)。
- インタラクティブなUI要素(Buttonなど)は適切なイベント(例: OnClick)を設定します。
実装例
IPointerClickHandler を使う方法
C#
using UnityEngine;
using UnityEngine.EventSystems;
public class UIButtonClickHandler : MonoBehaviour, IPointerClickHandler
{
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log($"UI {gameObject.name} がクリックされました!");
}
}
ButtonのOnClickを使う方法
Button
の OnClick() に関数を登録。- Inspector上で簡単に設定できます。
2. オブジェクトに対するクリック検知
仕組み
- ゲームオブジェクト(スプライトや3Dモデル)は Collider を使ってクリックを検知します。
- Physics Raycaster(3Dオブジェクト)や Physics2D Raycaster(2Dオブジェクト)が必要です。
必要な設定
- Collider の設定:
- クリックを検知したいオブジェクトに Collider または Collider2D を追加します。
- Raycaster の追加:
- カメラに Physics Raycaster(3D)または Physics2D Raycaster(2D)を追加します。
- EventSystem の確認:
- シーンに EventSystem が必要です。
実装例
IPointerClickHandlerを使う方法
C#
using UnityEngine;
using UnityEngine.EventSystems;
public class ObjectClickHandler : MonoBehaviour, IPointerClickHandler
{
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log($"オブジェクト {gameObject.name} がクリックされました!");
}
}
3. UIとオブジェクトクリック検知の違い
項目 | UIクリック検知 | オブジェクトクリック検知 |
---|---|---|
必要コンポーネント | Canvas, EventSystem, Graphic Raycaster | Collider, EventSystem, Physics Raycaster/2D Raycaster |
検知可能な対象 | UI要素(Button, Imageなど) | 2D/3Dオブジェクト |
主要インターフェース | IPointerClickHandler | IPointerClickHandler |
イベントの種類 | ボタンのOnClickやPointerイベント | Colliderを介したクリックイベント |
4. よくあるトラブル
UIがクリックを検知しない場合
- CanvasとEventSystemの確認:
- Canvasに Graphic Raycaster が設定されているか。
- シーンに EventSystem が存在するか。
- UIのレイヤーと順序:
- UI要素が正しいSorting Orderで描画されているか。
オブジェクトがクリックを検知しない場合
- Colliderの有無:
- クリック対象のオブジェクトに Collider(2D/3D)が設定されているか。
- カメラにRaycasterが設定されているか:
- Physics Raycaster または Physics2D Raycaster がアタッチされているか。
- Raycaster の Event Mask に対象オブジェクトのレイヤーが含まれているか。
- Culling Maskの設定:
- カメラの Culling Mask に対象オブジェクトのレイヤーが含まれているか。
5. まとめ
- UIとオブジェクトではクリック検知の仕組みが少し異なるため、適切な設定が必要です。
- 必要なコンポーネント(Collider, Raycaster, EventSystemなど)を忘れずに設定しましょう。
参考

イベントシステム - Unity マニュアル
イベントシステムはキーボード、マウス、タッチやカスタムの入力に基づいて、アプリケーション内のオブジェクトにイベントを送信する方法です。イベントシステムはイベントを送信するために協調する、いくつかのコンポーネントで構成されています。
コメント