Version: 5.4
public static Enum EnumMaskField (GUIContent label, Enum enumValue, GUIStyle style, params GUILayoutOption[] options);
public static Enum EnumMaskField (string label, Enum enumValue, GUIStyle style, params GUILayoutOption[] options);
public static Enum EnumMaskField (GUIContent label, Enum enumValue, params GUILayoutOption[] options);
public static Enum EnumMaskField (string label, Enum enumValue, params GUILayoutOption[] options);
public static Enum EnumMaskField (Enum enumValue, GUIStyle style, params GUILayoutOption[] options);
public static Enum EnumMaskField (Enum enumValue, params GUILayoutOption[] options);

パラメーター

label このフィールドの Prefix Label
enumValue フラグに使用する enum
options An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.
See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight.

戻り値

Enum ユーザーによって設定された値

説明

マスクに基づく enum のフィールドを作成します。


Simple window that shows the enum mask field.

以下は 3 つのオプションを使った EnumMaskField の実装例です。

using UnityEngine;
using UnityEditor;

public class EditorEnumExample : EditorWindow { public enum Example { Option_One = 1, //bits: 0000 0001 Option_Two = 2, //bits: 0000 0010 Option_Three = 4 //bits: 0000 0100 }

Example staticFlagMask = 0;

[MenuItem("Examples/Mask Field Usage")] static void Init( ) { // Get existing open window or if none, make a new one: EditorEnumExample window = (EditorEnumExample)EditorWindow.GetWindow( typeof(EditorEnumExample) ); window.Show( ); }

void OnGUI( ) { staticFlagMask = (Example)EditorGUILayout.EnumMaskField( "Static Flags", staticFlagMask );

} }

内部的に、Unity は enum をそれぞれの値がビットマスクである int として保存します。Nothing を選ぶとすべてのビットはクリアされ、整数 0 の値になります。Everything を選ぶとすべてのビットが設定され、整数 -1 の値になります。

ある特定の enum 値が設定されているかを判断するために、enum を int として扱い、ビットワイズかテストを行うか、または、enum 値を走査しそれぞれの enum を再コンストラクトすることによって、Everything の値を設定しなおします。以下の例はその方法を表示しています。

using UnityEngine;
using UnityEditor;

public class EditorEnumExample : EditorWindow { public enum Example { Option_One = 1, //bits: 0000 0001 Option_Two = 2, //bits: 0000 0010 Option_Three = 4 //bits: 0000 0100 }

Example staticFlagMask = 0;

[MenuItem("Examples/Mask Field Usage")] static void Init( ) { // Get existing open window or if none, make a new one: EditorEnumExample window = (EditorEnumExample)EditorWindow.GetWindow( typeof(EditorEnumExample) ); window.Show( ); }

void OnGUI( ) { staticFlagMask = (Example)EditorGUILayout.EnumMaskField( "Static Flags", staticFlagMask );

// If "Everything" is set, force Unity to unset the extra bits by iterating through them if( (int)staticFlagMask < 0 ) { int bits = 0; foreach( var enumValue in System.Enum.GetValues( typeof( Example ) ) ) { int checkBit = (int)staticFlagMask &amp; (int)enumValue; if( checkBit != 0 ) bits |= (int)enumValue; }

staticFlagMask = (Example)bits; }

} }