label | 此字段的前缀标签。 |
enumValue | 用于标志的枚举。 |
options | 一个可选的布局选项列表,用于指定额外的布局属性。此处传递的任何值都将覆盖 style 定义的设置。另请参阅:GUILayout.Width、GUILayout.Height、GUILayout.MinWidth、GUILayout.MaxWidth、GUILayout.MinHeight、 GUILayout.MaxHeight、GUILayout.ExpandWidth、GUILayout.ExpandHeight。 |
Enum 用户修改的值。
针对基于枚举的掩码创建一个字段。
\ 显示枚举掩码的简单窗口。 以下示例介绍了如何实现 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 会将枚举存储为 int,其中一个值为一个位掩码。选择"Nothing"将清除所有位,并生成一个整数值 0,选择"Everything"将设置所有位,并生成一个整数值 -1。
要确定是否已设置特定枚举类型,您可以将此枚举视为一个 int 并执行位运算 OR 进行测试,也可以通过迭代枚举值并相应地重新构建此枚举来取消"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; } } }