Help us understand the problem. What is going on with this article?

【Unity】EnumでUnityEventに引数を渡す

UnityEventにEnumを渡したい。

今回はこちらの方の記事を参考にさせていただきました。
ほっぽこ開発 Androidゲームアプリの個人開発者「ほっぽこ開発」のウェブサイト
そのまま使用すると、多量のエラーがコンソールを埋め尽くしますが、たった一行で使えるようになります。

※ MRTKでもUnityEventの拡張を行っているのでその影響でコンフリクトを起こしているようなエラーも出ているため、自己責任でご利用ください。

準備

まずはソースのダウンロード
以下のファイルをダウンロードしてください。
(ダウンロード先はUnityのプロジェクトフォルダ内にそのまま入れてください。)

1 Editor拡張
インストールDir => UnityProject/Asset/Editor/
UnityEventDrawer.cs

2 UnityEventの拡張
インストールDir => UnityProject/Asset/***
(どこでもいい)
EnumActionAttribute.cs

ソースコードの修正
75行目付近のソースコードを一行編集してください。

UnityEventDrawer.cs
    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;
    }

以上で使えるようになります。

使い方

※使い方はサイトから添付しています。

sample.cs
// GameManger -> class名
// WeponType -> Enum名
[EnumAction(typeof(GameManager.WeaponType))]
    // ※int型で引数を定義する
    public void hoge(int type)
    {
        // Inspectorで設定したEnumを受け取れます。
        GameManager.WeaponType enumType = (GameManager.WeaponType)type;
    }

サンプル

コメント 2020-07-16 222613.png

定数管理したい項目が多いHoloLens開発でもそのままEnumの値をunityeventに登録できるのは大変ありがたいです。
Stateで管理するような項目ではほぼほぼ使えると思うのでぜひお試し下さい。

atomicZAMURAI
フロントエンドの技術に携わる機会が多いです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away