こんにちは、タケシです。
今日バイトの仕事やってるとき、UnityEventデフォルトでは列挙型引数を与えることができないのを気づいて、しかし、どうしてもインスペクターで選択したいと思って、ネットで調べてみたので、メモする。
uGUIのボタンのOnClickイベントに列挙型引数を与える
最初は”unity button onclick enum”で検索したらこちらの記事が出てきた。
記事の内容に従ってやってみると

すごいなぁ本当に列挙を選択できるようになってる。
ToggleのOnValueChangedイベントに応用してみた

えっうそ?約束と違うじゃね?なんでうまくいかないんだろう、どこが違うんだろうか、と思って検索してみた。どうやら両者の差は引数の数だけで、OnClickはUnityEventで、OnValueChangedはUnityEvent<T0>を継承したToggleEvent。ではなぜボタンだけうまくいくんだろうか。先の記事のどころからもらった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のシグネチャーが変わったため、スクリプトがバグってる。対策法調査中・・・
