[Unity] UnityAction を Inspector で登録したいなら UnityEvent の出番

UnityActionをInspectorで登録

UnityEngine.UI.Buttonみたいの、Inspectorで登録できるようにしたい。
でも、そのままUnityActionを↓のように記述しても、Inspectorには表示されません。
public UnityAction voidAction

そんなときは、UnityEvent

↓のように記述してみましょう。
public UnityEvent unityEvent = new UnityEvent();
Inspectorに表示されます!
こんな感じ
UI.Button みたいになりました。


KindleのUnity本一覧

というわけで、コード例

処理を登録する

もちろん、Inspector以外からも登録できます
unityEvent.AddListener(voidAction);

ラムダ式でもいけちゃいます

unityEvent.AddListener(() => Debug.Log("unityEvent"));

指定した処理の削除

unityEvent.RemoveListener(voidAction);

全処理の削除

unityEvent.RemoveAllListeners();

処理の実行

unityEvent.Invoke();

こんな場合、どうなる?

同じ処理を複数登録して、1回削除した場合・・・
unityEvent.AddListener(voidAction);
unityEvent.AddListener(voidAction);
unityEvent.RemoveListener(voidAction);
unityEvent.Invoke();
これは、登録した処理が全部削除されてなにも実行しなくなります。
なので、同じ処理はまとめて削除されるようですね。

0 件のコメント :

コメントを投稿