uGUIのToggleのOnValueChangedイベントに列挙型引数を与える


こんにちは、タケシです。

今日バイトの仕事やってるとき、UnityEventデフォルトでは列挙型引数を与えることができないのを気づいて、しかし、どうしてもインスペクターで選択したいと思って、ネットで調べてみたので、メモする。

uGUIのボタンのOnClickイベントに列挙型引数を与える

最初は”unity button onclick enum”で検索したらこちらの記事が出てきた。

記事の内容に従ってやってみると

すごいなぁ本当に列挙を選択できるようになってる。

ToggleのOnValueChangedイベントに応用してみた 


えっうそ?約束と違うじゃね?なんでうまくいかないんだろう、どこが違うんだろうか、と思って検索してみた。どうやら両者の差は引数の数だけで、OnClickUnityEventで、OnValueChangedUnityEvent<T0>を継承したToggleEvent。ではなぜボタンだけうまくいくんだろうか。先の記事のどころからもらったUnityEventDrawer.csをちらっと読んでみて、半分以上はわからないが、これだけいじって
みるとできました。

UnityEventDrawer.cs

...

[CustomPropertyDrawer(typeof(UnityEvent), true)]
[CustomPropertyDrawer(typeof(UnityEvent<bool>), true)] // この行を追加
public class UnityEventDrawer : PropertyDrawer
{
    private Dictionary<string, State> m_States = new Dictionary<string, State>();
    ...
}


ちゃんと選択できるようになった、めでたしめでたし。

ジェネリック記法で書きたいんですが、調べてみてもうまくかけないので、とりあえず今度の目的は達成したから、次の課題にすることにした。

2020/10/17追記

Unity2020.1.7f1ではUnityEventBase.MethodInfoのシグネチャーが変わったため、スクリプトがバグってる。対策法調査中・・・