label | このフィールドの Prefix Label |
enumValue | フラグに使用する enum |
options | 指定してレイアウトオプションを渡すときのレイアウトオプションのリスト。ここで設定したものは 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.
Here is an example of how to implement an EnumMaskField, giving three options:
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 & (int)enumValue; if (checkBit != 0) bits |= (int)enumValue; }
staticFlagMask = (Example)bits; } } }