Unity入門

【Unity】Buttonの使い方 | スクリプト、OnClick、Interactable、EventTriger

UnityでUIを作る上でButtonボタンは必須の要素です。

ただし、Buttonボタンのクリックイベントの設定方法がわからない、スクリプトからボタンを制御したいEventSystemやEventTriggerを活用してボタンの挙動を細かく設定したいといった悩みを持つ人も多いです。

この記事では、Buttonボタンの基本から応用まで徹底的に解説します
特にEventSystemやEventTriggerを使う、マウスオーバー・長押し・ドラッグ操作など、ボタンの動作を自由にカスタマイズできるので、ぜひ活用してください!

この記事でわかること

  • UnityのButtonボタンの基本的な使い方(クリックイベントの設定)
  • スクリプトでButtonボタンを制御する方法(有効化・無効化)
  • EventSystem・EventTriggerを使ったボタン制御(マウスオーバー・長押し・ドラッグ対応)
  • よくあるエラーと解決策

※ チェックボタンを作成したい方はこちらを参考にしてください。

それでは本題に入っていきましょう。

UnityのButtonボタンの使い方

Buttonボタンの追加方法

  1. [Hierarchy]→[右クリック]→[UI] → [Button – TextMeshPro]を選択
  2. シーン内にButtonボタンが追加される

ボタンの構成要素

  • Image→ Button(ボタン)の見た目(背景画像)
  • Button→ Button(ボタン)のクリックイベント
  • TextMeshPro(子オブジェクト) → Button(ボタン)上のテキスト
Unity Buttonのコンポーネントの画像

※ Canvas、TextMeshPro、Imageは以下のサイトを参考にしてください

OnClickの設定(動的&静的)

Inspectorで設定(静的)

  1. HierarchyButtonを選択
  2. [On Click()] の「+」ボタンを押します
  3. スクリプトを持つHierarchyのGameObjectをドラッグ&ドロップ
  4. 実行する関数を選択(例: StartGame())

※ ③のGameObjectには事前にProjectからアタッチしておこう!

using UnityEngine;

public class ButtonExample : MonoBehaviour
{
    public void StartGame()
    {
        Debug.Log("ゲーム開始!");
    }
}
Unity ButtonのOnClickの画像

スクリプトでAddListenerで設定(動的)

以下のようにスクリプトを組むことでStart時にOnClickイベントにOnButtonClick関数が登録されます。(myButtonにはButtonオブジェクトをInspectorでアタッチしておく必要がある)

using UnityEngine;
using UnityEngine.UI;

public class ButtonController : MonoBehaviour
{
    public Button myButton;

    void Start()
    {
        myButton.onClick.AddListener(OnButtonClick);
    }

    void OnButtonClick()
    {
        Debug.Log("ボタンが押された!");
    }
}

Buttonのinteractableの設定(有効化・無効化)

InspectorでButtonのinteractableの設定(静的)

Buttonの有効化、無効化をInspectorで行う場合、「Interactable」にチェックを入れると有効化、チェックを外すと無効化されます。
※ 無効化とはクリックしても反応がなくなるという意味です。

スクリプトでButtonのinteractableの設定(動的)

以下のようにして有効化、無効化はスクリプトで行えます。

Button.interactable = true //有効化
Button.interactable = false //無効化

EventSystemとEventTriggerの活用

EventSystemとは?

EventSystemはUnityの入力イベントを管理するシステムで、
ボタンをクリックするだけでなく、マウスオーバー・キーボード・長押しなどのイベントも処理できます。

Unity UIが正常に動作するためには、必ずシーン内にEventSystemが必要です!
もしもボタンがクリックできない場合は、EventSystemが存在するか確認しよう。

EventTriggerを使ったボタンの拡張

EventTriggerを使うと、ボタンの挙動をさらに細かく制御できます。
例えば、マウスオーバー・長押し・サイクルの判定など

EventTriggerの追加方法(Inspector)

  1. HierarchyButtonを選択
  2. [Add Component] → [Event Trigger]を追加
  3. [Add New Event Type]でイベントを追加
  4. スクリプトの関数を設定する

EventTrigger の実装例(スクリプト)

①マウスオーバー(ポインタ入力 / ポインタ終了)

ボタンにカーソルを乗せた時・離れた時の処理を追加できる!

using UnityEngine;
using UnityEngine.EventSystems;

public class ButtonExample : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
    public void OnPointerEnter(PointerEventData eventData)
    {
        Debug.Log("ボタンにマウスが乗った!");
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        Debug.Log("ボタンからマウスが離れた!");
    }
}

② 長押し(PointerDown / PointerUp)

長押しの開始・キャンセルを判定できる!

using UnityEngine;
using UnityEngine.EventSystems;

public class ButtonLongPress : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    private bool isPressed = false;

    public void OnPointerDown(PointerEventData eventData)
    {
        isPressed = true;
        Debug.Log("ボタン長押し開始");
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        isPressed = false;
        Debug.Log("ボタン長押し解除");
    }
}

③ ドラッグ

ボタンをかけて移動できる!

using UnityEngine;
using UnityEngine.EventSystems;

public class ButtonDrag : MonoBehaviour, IDragHandler
{
    public void OnDrag(PointerEventData eventData)
    {
        transform.position = Input.mousePosition;
    }
}

よくあるエラーと解決策

ボタンがクリックできない

 ・EventSystemが存在するか確認

 ・Canvasのレンダリングモードを「Screen Space – Overlay」にする

EventTriggerが反応しない

 ・EventTrigger のコンポーネントを正しく追加できているか確認

 ・インターフェースを正しく実装しているかチェック(IPointerEnterHandler など)

まとめ

UnityのButtonは、クリックイベントを設定するだけでなく、EventTriggerを活用すれば高度なUI制御可能です。

基本的なクリックイベントは Inspector から設定可能
スクリプトでボタンの有効化・有効化・テキスト変更ができる
EventSystem はボタンの動作に必須!
EventTrigger を使えば、マウスオーバー・長押し・段階操作も実行可能