概要
Unityでは、特定の契機で実行する関数をインスペクタで指定することができます。
ButtonコンポーネントにおけるOnClickや、EventTriggerでの各種イベント等がそうです。
で、インスペクタから関数を指定する時に「引数にEnumを指定できたら良いのになぁ」と思い、調べてみました。
結論
ググったらUnityのフォーラムが見つかりました。「Ability to add enum argument to button functions」に投稿された方法 で実現できました。
原理の理解は皆無ですので悪しからず。
方法
- 上記リンクの投稿にあるスクリプトをDL
- 「UnityEventDrawer.cs」をAssets/Editorフォルダに、「EnumActionAttribute.cs」をAssets配下の任意の場所に保存
- EnumActionAttribute.csに「using System;」と「using UnityEngine;」を追記
- Enumを用意
今回はGameManagerにWeaponTypeというEnumを作成しました。 - Enumを引数とするメソッドを下記のような感じで用意
[EnumAction(typeof(GameManager.WeaponType))] public void hoge(int type) { GameManager.WeaponType enumType = (GameManager.WeaponType)type; //なんかの処理 }
とても助かりましたありがとうございます
返信削除UNITY標準にして欲しいくらいですね