本日は UnityEvent の小ネタ枠です。
スクリプトからUnityEventに引数有りのリスナーを登録する方法を記事にします。
前提条件
前回記事の続きです。
今回はスクリプトからの登録となるため、非永続的リスナーでの登録方法となります。
bluebirdofoz.hatenablog.com
引数有りの登録方法
以下のように AddListener に関数を登録することで、動的に引数を指定することができます。
UnityEventInstance.AddListener(() => CallMethod(args));
サンプルスクリプト
文字列リストを基に、引数を指定したリスナーを登録して実行する以下のスクリプトを作成しました。
・CheckUnityEventArgs.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class CheckUnityEventArgs : MonoBehaviour { /// <summary> /// テスト用UnityEvent /// </summary> public UnityEvent TestEvent; /// <summary> /// テスト用引数リスト /// </summary> public List<string> MessageList; /// <summary> /// リスナーの登録とイベントの実行 /// </summary> public void AddListenerAndInvoke() { Debug.Log("AddListenerAndInvoke"); // リスナーを一旦全て破棄する TestEvent.RemoveAllListeners(); // リストのメッセージを個々に引数に渡すリスナーを登録する foreach(string message in MessageList) { TestEvent.AddListener(() => TestCallMethod(message)); } // 登録リスナーを呼び出す TestEvent.Invoke(); } /// <summary> /// 試験用呼び出しメソッド /// </summary> public void TestCallMethod(string message) { Debug.Log("TestCallMethod Called !!! : " + message); } }
適当なゲームオブジェクトに設定し、引数で渡す文字列リストを作成しておきます。
動作確認
シーンを再生して動作を確認します。
関数を実行すると、引数にリストの文字列を指定されたイベントが実行されます。