2022/10/25追記
こちらの記事内容はUnity2021以降のバージョンでの動作が確認できていないため以下に掲載させていただくリンクにあるファイルを使用していただくと記事内容を再現できるかと思います!
UnityEventにEnumを渡したい。
今回はこちらの方の記事を参考にさせていただきました。
ほっぽこ開発 Androidゲームアプリの個人開発者「ほっぽこ開発」のウェブサイト
そのまま使用すると、多量のエラーがコンソールを埋め尽くしますが、たった一行で使えるようになります。
※ MRTKでもUnityEventの拡張を行っているのでその影響でコンフリクトを起こしているようなエラーも出ているため、自己責任でご利用ください。
準備
まずはソースのダウンロード
以下のファイルをダウンロードしてください。
(ダウンロード先はUnityのプロジェクトフォルダ内にそのまま入れてください。)
1 Editor拡張
インストールDir => UnityProject/Asset/Editor/
UnityEventDrawer.cs
2 UnityEventの拡張
インストールDir => UnityProject/Asset/***
(どこでもいい)
EnumActionAttribute.cs
ソースコードの修正
75行目付近のソースコードを一行編集してください。
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
// 追加 ---------------------------------------------------------------------- /
if (property.FindPropertyRelative("m_TypeName") != null) m_Prop = property;
// --------------------------------------------------------------------------- /
// 削除 ---------------------------------------------------------------------- /
// m_Prop = property;
// -------------------------------------------------------------------------- /
m_Text = label.text;
var state = RestoreState(property);
OnGUI(position);
state.lastSelectedIndex = m_LastSelectedIndex;
}
以上で使えるようになります。
使い方
※使い方はサイトから添付しています。
// GameManger -> class名
// WeponType -> Enum名
[EnumAction(typeof(GameManager.WeaponType))]
// ※int型で引数を定義する
public void hoge(int type)
{
// Inspectorで設定したEnumを受け取れます。
GameManager.WeaponType enumType = (GameManager.WeaponType)type;
}
サンプル
定数管理したい項目が多いHoloLens開発でもそのままEnumの値をunityeventに登録できるのは大変ありがたいです。
Stateで管理するような項目ではほぼほぼ使えると思うのでぜひお試し下さい。