こんにちは、タケシです。
今日バイトの仕事やってるとき、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
のシグネチャーが変わったため、スクリプトがバグってる。対策法調査中・・・