search
LoginSignup
1
Help us understand the problem. What are the problem?

posted at

updated at

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

2022/10/25追記

こちらの記事内容はUnity2021以降のバージョンでの動作が確認できていないため以下に掲載させていただくリンクにあるファイルを使用していただくと記事内容を再現できるかと思います!

リンク先 -> https://forum.unity.com/threads/ability-to-add-enum-argument-to-button-functions.270817/page-4#post-7745919

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で管理するような項目ではほぼほぼ使えると思うのでぜひお試し下さい。

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
What you can do with signing up
1
Help us understand the problem. What are the problem?