5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-12-04

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

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

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

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

記事の内容に従ってやってみると
スクリーンショット 2018-12-05 午前2.46.18.png
すごいなぁ本当に列挙を選択できるようになってる。

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

スクリーンショット 2018-12-05 午前2.42.49.png
えっうそ?約束と違うじゃね?なんでうまくいかないんだろう、どこが違うんだろうか、と思って検索してみた。どうやら両者の差は引数の数だけで、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>();
    ...
}

スクリーンショット 2018-12-05 午前3.11.05.png
ちゃんと選択できるようになった、めでたしめでたし。

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

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

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?