2017年1月28日土曜日

UnityのButtonのOnClickに列挙型の引数を与える

調べた際のメモです。

概要

Unityでは、特定の契機で実行する関数をインスペクタで指定することができます。
ButtonコンポーネントにおけるOnClickや、EventTriggerでの各種イベント等がそうです。

で、インスペクタから関数を指定する時に「引数にEnumを指定できたら良いのになぁ」と思い、調べてみました。

結論

ググったらUnityのフォーラムが見つかりました。
「Ability to add enum argument to button functions」に投稿された方法 で実現できました。
原理の理解は皆無ですので悪しからず。

方法

  1. 上記リンクの投稿にあるスクリプトをDL
  2. 「UnityEventDrawer.cs」をAssets/Editorフォルダに、「EnumActionAttribute.cs」をAssets配下の任意の場所に保存
  3. EnumActionAttribute.csに「using System;」と「using UnityEngine;」を追記
  4. Enumを用意
    今回はGameManagerにWeaponTypeというEnumを作成しました。
  5. Enumを引数とするメソッドを下記のような感じで用意

    [EnumAction(typeof(GameManager.WeaponType))]
    public void hoge(int type)
    {
        GameManager.WeaponType enumType = (GameManager.WeaponType)type;
        //なんかの処理
    }

引数はintで定義します。メソッド内でEnumに変換して利用します。Enumは内部ではint型なので、単純なキャストで変換できるそうです。

すると下記のようにButtonのOnClickで列挙型を指定できました。



こういうのをエディタ拡張って言うんですよね。凄いです。Unityの素の機能ですら理解が追い付かないのに。

1 件のコメント:

  1. とても助かりましたありがとうございます
    UNITY標準にして欲しいくらいですね

    返信削除