はじめに
エディタ拡張でEnumを複数選択する要素を作りたいときはEnumFlagsField
を使おうねという記事になります。
以前(Unity何からは要調査)はEnumMaskField
で実装できたのですが、少なくともUnity2017.4
の段階ではObsolete
つまり廃止となっており、EnumFlagsField
の利用を推奨とのようです。
これだけで記事が終わるのも寂しいので、EnumFlagsField
の使い方だけ紹介したいと思います。
EnumFlagsField
オーバーロードがたくさんあるのですが、まずは代表的なものを2つ紹介します。
public static Enum EnumFlagsField(Enum enumValue, params GUILayoutOption[] options); public static Enum EnumFlagsField(string label, Enum enumValue, params GUILayoutOption[] options);
Unity - Scripting API: EditorGUILayout.EnumFlagsField
初見でみるとEnum
型ってどう使うんやと思うかもしれませんので実際の使い方も見ていただけるとわかりやすいと思います。
使い方
公式ドキュメントからサンプルコードを引っ張ってきます。
using UnityEditor; using UnityEngine; class EnumFlagsFieldExample : EditorWindow { enum ExampleFlagsEnum { None = 0, // Custom name for "Nothing" option A = 1 << 0, B = 1 << 1, AB = A | B, // Combination of two flags C = 1 << 2, All = ~0, // Custom name for "Everything" option } ExampleFlagsEnum m_Flags; [MenuItem("Examples/EnumFlagsField Example")] static void OpenWindow() { GetWindow<EnumFlagsFieldExample>().Show(); } void OnGUI() { m_Flags = (ExampleFlagsEnum)EditorGUILayout.EnumFlagsField(m_Flags); } }
ExampleFlagsEnum
の中身はいわゆるビットフラグと言われるもので、複数のフラグを立てられるようにしたものですね。
また0
がNothing
に対応し,~0
(0の補数)がEvertything
に対応しています。
ビットフラグの操作については先ほど貼った記事を参照してみてください。