UnityEventToolsとは?

UnityuGUIのボタンが押された時、スクロールビューなどのUI要素が変化した時などに実行したいイベントは、

UnityEventで実装されておりインスペクタ上からイベントを指定することができます。

ですが、

  • イベントを追加する
  • オブジェクトをアタッチする
  • リストから呼ばれるイベントを選択する

という手順を踏む必要があります。

呼びたいイベントが決まっている場合、スクリプトからイベントを指定できると便利です。

その時に使えるのがUnityEventToolsです。

手動でイベントを追加する手順

まず、手動でイベントを追加する手順を確認します。

シーン上にButtonを追加しました。

Buttonコンポーネント中のOnClick()イベントの+ボタンを押します。

ヒエラルキー上のオブジェクトをドラッグ&ドロップします。

No Function のドロップダウンリストが選択できるようになるので、

コンポーネント→イベントの順で呼びたいイベントを選択します。

これでイベントを指定できました。

スクリプトからイベントを設定する

以下のようなエディタ拡張用のスクリプトを用意します。

シーン上の適当なオブジェクトにアタッチし、

_buttonにボタンを割り当てます。

using UnityEngine;
using UnityEngine.UI;
#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.Events;
#endif

public class UnityButtonEvent : MonoBehaviour
{
    [SerializeField] private Button _button;
    
    public void OnButtonClicked()
    {
        Debug.Log("Button clicked!");
    }
    
    #if UNITY_EDITOR
    [CustomEditor(typeof(UnityButtonEvent))]
    public class UnityButtonEventEditor : Editor
    {
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            if (GUILayout.Button("Set Event"))
            {
                if (target is UnityButtonEvent buttonEvent)
                {
                    buttonEvent._button.onClick.RemoveAllListeners();
                    UnityEventTools.AddVoidPersistentListener(buttonEvent._button.onClick, buttonEvent.OnButtonClicked);
                }
            }
        }
    }
    #endif
}

これでSet Eventボタンを押すと、設定されているButtonコンポーネントのOnClick()にイベントが設定されます。

UnityEventToolsの関数

サンプル中でボタンにイベントを設定しているのは以下の部分です。

UnityEventTools.AddVoidPersistentListener(buttonEvent._button.onClick, buttonEvent.OnButtonClicked);

UnityEventToolsAddVoidPersistentListenerメソッドの第1引数にUnityEventの変数、

第2引数に呼びたいメソッドをそれぞれ指定しています。

AddVoidPersistentListenerは引数を持たないイベントを設定するのに使います。

他にも以下のメソッドがあります。

AddBoolPersistentListenerbool型引数イベントを設定する
AddFloatPersistentListenerfloat型引数を持つイベントを設定する
AddIntPersistentListenerint型引数を持つイベントを設定する
AddObjectPersistentListenerobject型引数を持つイベントを設定する
AddStringPersistentListenerstring型引数を持つイベントを設定する

以下のような文字列を引数に持つメソッドを追加します。

public void OnButtonClickedString(string text)
{
    Debug.Log($"String Event : {text}!");
}

UnityButtonEventEditorクラス内から以下のようにイベントを追加できます。

UnityEventTools.AddStringPersistentListener(buttonEvent._button.onClick, buttonEvent.OnButtonClickedString, "Hello World");

これでイベントが追加されました。

その他の機能

その他にもイベントのインデックスを指定して、

イベントを変更したり削除する機能も用意されています。

必要に応じて活用してください。

注意点

エディタ拡張全般に言えることですが、

UnityEventToolsUnityEditor名前空間にあるため、必ず#if UNITY_EDITORで囲む必要があります。

ビルド時にエラーが発生することを防げます。

まとめ

今回はUnityEventToolsを使用してUnityEventをエディタ拡張用スクリプトから操作する手順について解説しました。

特定の場面で威力を発揮しますが、イベントを大量に設定、変更したい場合に覚えておくと役に立つかもしれません。

Unity開発では「手動で繰り返している作業」があれば、それは自動化のチャンスです。

今回のような小さなツールから始めて、開発効率を少しずつ向上させていってください。

📣おしらせ!

Unity Asset Storeで BLACK FRIDAY セール が開催中です。

300以上の人気アセットを50%オフで購入するチャンス。

フラッシュセールでは最大95%オフも?

セールは 2025年12月11日午前1時(日本時間)に終了します。

🔗関連ページ