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 - Manual: Unity Manual
The Unity Manual helps you learn and use the Unity engine. With the Unity engine you can create 2D and 3D games, apps an...

コメント