目录
1. 前言
- 专门用于编辑器界面的GUI类,提供了Unity内置类或结构体的控件函数,比如Color类、Vector3类等定义的控件。
- 为编辑器在Inspector和EditorWindow中扩展提供了很大的方便。
2. 参数
静态函数描述BeginChangeCheck启动一个新代码块来检查 GUI 更改。BeginDisabledGroup创建一组可禁用的控件。BeginFoldoutHeaderGroup创建一个左侧带有折叠箭头的标签。BeginProperty创建一个属性封装器,可用于使常规 GUI 控件与 SerializedProperty 配合使用。BoundsField创建用于输入 Bounds 的 Center 和 Extents 字段。BoundsIntField创建用于输入 BoundsInt 的 Position 和 Size 字段。ColorField创建一个用于选择 Color 的字段。CurveField生成一个用于编辑 AnimationCurve 的字段。DelayedDoubleField创建一个用于输入双精度浮点数的延迟文本字段。DelayedFloatField创建一个用于输入浮点数的延迟文本字段。DelayedIntField创建一个用于输入整数的延迟文本字段。DelayedTextField创建一个延迟文本字段。DoubleField生成一个用于输入双精度浮点数的文本字段。DrawPreviewTexture在矩形内绘制纹理。DrawRect在当前编辑器窗口中的指定位置以指定大小绘制一个着色的矩形。DrawTextureAlpha在矩形内绘制纹理的 Alpha 通道。DropdownButton创建一个能够对鼠标按下做出反应的按钮,用于显示您自己的下拉菜单内容。DropShadowLabel绘制带有投影的标签。EndChangeCheck结束代码块并检查是否有任何 GUI 更改。EndDisabledGroup结束由 BeginDisabledGroup 开始的禁用组。EndFoldoutHeaderGroup关闭以 BeginFoldoutHeaderGroup 开头的组。EndProperty结束由 BeginProperty 开始的属性封装器。EnumFlagsField在单击枚举类型的每个值时显示带有选项的菜单。一个名称为“Nothing”的值0选项和一个名称为“Everything”的值0(即所有位设置)选项总是显示在菜单的顶部。值0和0的名称可以通过在enum类型中定义这些值来重写。EnumPopup创建一个枚举弹出选择字段。FloatField创建一个用于输入浮点数的文本字段。FocusTextInControl将键盘焦点移动到指定的文本字段,并开始编辑内容。Foldout创建一个左侧带有折叠箭头的标签。GetPropertyHeight获取 PropertyField 控件所需的高度。GradientField创建一个用于编辑 Gradient 的字段。HandlePrefixLabel为一些控件创建一个标签。HelpBox创建一个带有发送给用户的消息的帮助框。InspectorTitlebar创建一个类似于 Inspector 窗口的标题栏。IntField创建一个用于输入整数的文本字段。IntPopup创建一个整数弹出选择字段。IntSlider创建一个滑动条,用户可以进行拖动以在最小值和最大值之间更改整数值。LabelField创建一个标签字段。(用于显示只读信息。)LargeSplitButtonWithDropdownList创建一个大按钮,其中包含常规按钮部分和用于打开下拉菜单的箭头。LayerField创建一个层选择字段。LinkButton制作可点击的链接标签。LongField创建一个用于输入长整数的文本字段。MaskField创建一个适用于掩码的字段。MinMaxSlider创建一个特殊滑动条,用户可利用该滑动条指定最小值和最大值之间的一个范围。MultiFloatField创建一个带有文本字段的多控件,用于在同一行中输入多个浮点值。MultiIntField创建一个带有文本字段的多控件,用于在同一行中输入多个整数。MultiPropertyField创建一个在同一行中包含多个属性字段的多控件。ObjectField创建一个对象字段。您可以通过拖放对象或使用对象选择器选择对象来分配对象。PasswordField创建一个可让用户输入密码的文本字段。Popup创建一个通用弹出选择字段。PrefixLabel创建一个显示在特定控件前的标签。ProgressBar创建一个进度条。PropertyField使用此方法在编辑器中针对 SerializedProperty 创建一个字段。RectField创建用于输入 Rect 的 X、Y、W 和 H 字段。RectIntField创建用于输入 RectInt 的 X、Y、W 和 H 字段。SelectableLabel创建一个可选择标签字段。(用于显示可复制粘贴的只读信息。)Slider创建一个滑动条,用户可以进行拖动以在最小值和最大值之间更改值。TagField创建一个标签选择字段。TextArea创建一个文本区域。TextField创建一个文本字段。Toggle创建一个开关。ToggleLeft创建一个开关字段,其中开关位于左侧,标签紧随其右。Vector2Field创建用于输入 Vector2 的 X 和 Y 字段。Vector2IntField创建用于输入 Vector2Int 的 X 和 Y 整数字段。Vector3Field创建用于输入 Vector3 的 X、Y 和 Z 字段。Vector3IntField创建用于输入 Vector3Int 的 X、Y 和 Z 整数字段。Vector4Field创建用于输入 Vector4 的 X、Y、Z 和 W 字段。
3. 功能
3.1 折叠菜单: Foldout
- Foldout:创建一个左侧带有折叠箭头的标签。bool 用户选择的折叠状态。如果为 true,则应渲染子对象。这适用于创建树或文件夹之类的结构,其中子对象仅在父项展开时显示。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{publicbool showPosition =true;publicstring status ="Select a GameObject";[MenuItem("Examples/Foldout Usage")]staticvoidInit(){UnityEditor.EditorWindow window =GetWindow(typeof(EditorGUIExample));
window.position =newRect(0,0,150,60);
window.Show();}voidOnGUI(){
showPosition = EditorGUI.Foldout(newRect(3,3, position.width -6,15), showPosition, status);if(showPosition)if(Selection.activeTransform){
Selection.activeTransform.position = EditorGUI.Vector3Field(newRect(3,25, position.width -6,40),"Position", Selection.activeTransform.position);
status = Selection.activeTransform.name;}if(!Selection.activeTransform){
status ="Select a GameObject";
showPosition =false;}}voidOnInspectorUpdate(){Repaint();}}
3.2 检查 GUI 更改: BeginChangeCheck 、EndChangeCheck 监听值改变
- BeginChangeCheck :启动一个新代码块来检查 GUI 更改。
- EndChangeCheck :结束代码块并检查是否有任何 GUI 更改。
- 结合使用来创建一个代码块,检查是否只有该代码块中包含的控件的 GUI 状态发生了更改。
- 此方法不同于 GUI.changed,后者对于 GUI 状态的“任何”更改都返回 true。BeginChangeCheck() 将检查限制为一组特定的控件。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{float sliderValue =0;string labelText ="-";[MenuItem("Window/Example Window")]staticvoidInit(){var example =(EditorGUIExample)EditorWindow.GetWindow(typeof(EditorGUIExample));
example.Show();}voidOnGUI(){
EditorGUILayout.LabelField("New value", labelText);
EditorGUI.BeginChangeCheck();
sliderValue = EditorGUI.Slider(newRect(0,0,100,30), sliderValue,0,1);if(EditorGUI.EndChangeCheck()){
labelText = sliderValue.ToString();}}}
3.3 可禁用控件:BeginDisabledGroup 、EndDisabledGroup 是否禁用组中的控件
- BeginDisabledGroup :创建一组可禁用的控件。
- EndDisabledGroup :结束由 BeginDisabledGroup 开始的禁用组。
- 如果 Disabled 设置为 true,则将禁用组内的控件。 如果为 false,则不会更改 Enabled/Disabled 状态。注意:与使用 EditorGUI.BeginDisabledGroup()/EditorGUI.EndDisabledGroup() 相比,DisabledScope 通常更可取,因为它提供了一个更加安全的作用域机制
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{[MenuItem("Tool/TestOnGUI")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}bool _foldoutValue;bool _isDisable;string _textField;string _passwordFile;publicvoidOnGUI(){
_foldoutValue = EditorGUI.Foldout(newRect(0,0,20,20), _foldoutValue,"折叠");if(_foldoutValue){
_isDisable = EditorGUI.Toggle(newRect(0,20,20,20),"Disable", _isDisable);
EditorGUI.BeginDisabledGroup(_isDisable);
_textField = EditorGUI.TextField(newRect(0,40,200,20),"账号:", _textField);
_passwordFile = EditorGUI.PasswordField(newRect(0,60,200,20),"密码:", _passwordFile);
EditorGUI.EndDisabledGroup();}}}
3.4 下拉菜单:DropdownButton
- DropdownButton :创建一个能够对鼠标按下做出反应的按钮,用于显示您自己的下拉菜单内容。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{[MenuItem("Tool/TestOnGUI")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}bool _foldoutValue;publicvoidOnGUI(){
_foldoutValue = EditorGUI.Foldout(newRect(0,0,20,20), _foldoutValue,"折叠");if(_foldoutValue){if(EditorGUI.DropdownButton(newRect(0,20,200,40),newGUIContent("下拉菜单"), FocusType.Keyboard)){GenericMenu genericMenu =newGenericMenu();
genericMenu.AddItem(newGUIContent("One"),false,()=>{ Debug.Log("回调函数");});
genericMenu.AddSeparator(string.Empty);//分割线
genericMenu.AddItem(newGUIContent("Two"),false,()=>{});
genericMenu.AddItem(newGUIContent("There"),false,()=>{});
genericMenu.DropDown(newRect(0,20,20,20));}}}}
3.5 超链接:LinkButton
- LinkButton :超链接按钮。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{[MenuItem("Tool/TestOnGUI")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}publicvoidOnGUI(){if(EditorGUI.LinkButton(newRect(0,0,100,30),"超链接")){
Application.OpenURL("www.baidu.com");}}}
3.6 颜色字段:ColorField
- ColorField :创建一个用于选择 Color 的字段。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{[MenuItem("Tool/TestOnGUI")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}Color _colorFiled;publicvoidOnGUI(){
_colorFiled = EditorGUI.ColorField(newRect(0,0,200,20), _colorFiled);}}
3.7 边界盒字段:BoundsField 、BoundsIntField
- BoundsField :创建用于输入 Bounds 的 Center 和 Extents 字段。
- BoundsIntField :创建用于输入 BoundsInt 的 Position 和 Size 字段。
usingCodice.Client.BaseCommands;usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{[MenuItem("Tool/TestOnGUI")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}Bounds _boundsFiledValue;BoundsInt _boundsIntFiledValue;publicvoidOnGUI(){
_boundsFiledValue = EditorGUI.BoundsField(newRect(0,0,200,20), _boundsFiledValue);
_boundsIntFiledValue = EditorGUI.BoundsIntField(newRect(0,50,200,20), _boundsIntFiledValue);}}
3.8 动画曲线面板:CurveField
- CurveField :生成一个用于编辑 AnimationCurve 的字段。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{[MenuItem("Tool/TestOnGUI")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}privateAnimationCurve _animationCurveValue =newAnimationCurve();publicvoidOnGUI(){
_animationCurveValue = EditorGUI.CurveField(newRect(0,0,200,20), _animationCurveValue);}}
3.9 渐变:GradientField
- GradientField :创建一个用于编辑 Gradient 的字段。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{Gradient gradient =newGradient();[MenuItem("Examples/Gradient Field demo")]staticvoidInit(){EditorWindow window =GetWindow(typeof(EditorGUIExample));
window.position =newRect(0,0,400,199);
window.Show();}voidOnGUI(){
gradient = EditorGUI.GradientField(newRect(3,3, position.width -6,50),"Gradient", gradient);}}
3.10 对象选择器:ObjectField
- ObjectField :创建一个对象字段。您可以通过拖放对象或使用对象选择器选择对象来分配对象。当对象引用作为资源的一部分进行存储时,请确保 allowSceneObjects 参数为 false,因为资源无法存储对场景中对象的引用。如果 ObjectField 是脚本组件的自定义编辑器的一部分,请使用 EditorUtility.IsPersistent() 检查该组件是位于资源还是场景对象中。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{[MenuItem("Tool/ObjectField")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}privateSprite _objectFieldValue;publicvoidOnGUI(){
_objectFieldValue =(Sprite)EditorGUI.ObjectField(newRect(0,0,50,50), _objectFieldValue,typeof(Sprite),true);}}
3.11 双精度浮点数字段:DoubleField、DelayedDoubleField
- DoubleField :生成一个用于输入双精度浮点数的文本字段。
- DelayedDoubleField :创建一个用于输入双精度浮点数的延迟文本字段。与DoubleField 类似,但在用户按 Enter 键或将焦点从双精度浮点数字段移开之前,不会返回新值。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{double value1 =0F;double value2 =0F;[MenuItem("Tool/DoubleField")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}publicvoidOnGUI(){
value1 = EditorGUI.DoubleField(newRect(0,0,100,30), value1);
value2 = EditorGUI.DelayedDoubleField(newRect(0,50,200,30), value2);}}
3.12 多维字段:RectField、RectIntField、Vector2Field、Vector2IntField、Vector3Field、Vector3IntField、Vector4Field
- RectField :创建用于输入 Rect 的 X、Y、W 和 H 字段。
- RectIntField :创建用于输入 RectInt 的 X、Y、W 和 H 字段。
- Vector2Field :创建用于输入 Vector2 的 X 和 Y 字段。
- Vector2IntField :创建用于输入 Vector2Int 的 X 和 Y 整数字段。
- Vector3Field :创建用于输入 Vector3 的 X、Y 和 Z 字段。
- Vector3IntField :创建用于输入 Vector3Int 的 X、Y 和 Z 整数字段。
- Vector4Field :创建用于输入 Vector4 的 X、Y、Z 和 W 字段。
RectField:
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{Camera[] cameras;[MenuItem("Tool/DoubleField")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}voidOnGUI(){if(GUI.Button(newRect(3,3, position.width -6,20),"Update list"))
cameras =FindObjectsOfType<Camera>();if(cameras.Length >0){for(var i =0; i < cameras.Length; i++){
cameras[i].rect = EditorGUI.RectField(newRect(3,25+45* i, position.width -6,25),
cameras[i].name,
cameras[i].rect);}}}}
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{Vector2 v2;Vector2Int v2Int;Vector3 v3;Vector3Int v3Int;Vector4 v4Int;[MenuItem("Tool/DoubleField")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}voidOnGUI(){
v2 = EditorGUI.Vector2Field(newRect(0,0,100,30),"Vector2Field", v2);
v2Int = EditorGUI.Vector2IntField(newRect(0,40,100,30),"Vector2IntField", v2Int);
v3 = EditorGUI.Vector2Field(newRect(0,80,100,30),"Vector3Field", v3);
v3Int = EditorGUI.Vector3IntField(newRect(0,120,150,30),"Vector3IntField", v3Int);
v4Int = EditorGUI.Vector4Field(newRect(0,160,150,30),"Vector4Field", v4Int);}}
3.13 切换框:Toggle、ToggleLeft
- Toggle :创建一个开关。
- ToggleLeft :创建一个开关字段,其中开关位于左侧,标签紧随其右。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{bool showClose =true;[MenuItem("Tool/Toggle")]privatestaticvoidOpenGUIExample(){GetWindow<EditorGUIExample>().Show();}voidOnGUI(){
showClose = EditorGUI.Toggle(newRect(0,5, position.width,20),"Show Close Button",
showClose);
showClose = EditorGUI.ToggleLeft(newRect(0,25, position.width,20),"Show Close Button",
showClose);}}
3.14 选择标签:TagField、LayerField
- TagField :创建一个标签选择字段。
- LayerField :创建一个层选择字段。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{string selectedTag ="";int selectedLayer =0;[MenuItem("Examples/Field")]staticvoidInit(){EditorWindow window =GetWindow<EditorGUIExample>();
window.position =newRect(0,0,350,70);
window.Show();}voidOnGUI(){
selectedTag = EditorGUI.TagField(newRect(3,3, position.width /2-6,20),"New Tag:",
selectedTag);
selectedLayer = EditorGUI.LayerField(newRect(position.width /2+3,3, position.width /2-6,20),"New Layer:",
selectedLayer);}voidOnInspectorUpdate(){Repaint();}}
3.15 滑动条:Slider、MinMaxSlider
- Slider :创建一个滑动条,用户可以进行拖动以在最小值和最大值之间更改值。
- MinMaxSlider :创建一个特殊滑动条,用户可利用该滑动条指定最小值和最大值之间的一个范围。
usingUnityEditor;usingUnityEditor.PackageManager;usingUnityEngine;usingUnityEngine.UIElements;publicclassEditorGUIExample:EditorWindow{float scale =1.0f;float minVal =-10;float minLimit =-20;float maxVal =10;float maxLimit =20;[MenuItem("Examples/Slider")]staticvoidInit(){EditorWindow window =GetWindow<EditorGUIExample>();
window.position =newRect(0,0,350,70);
window.Show();}voidOnGUI(){
scale = EditorGUI.Slider(newRect(5,30,150,20), scale,1,100);
EditorGUI.MinMaxSlider(newRect(0,0, position.width,20),newGUIContent("Random range:"),ref minVal,ref maxVal,
minLimit, maxLimit);}}
3.16 进度条:ProgressBar
- ProgressBar :创建一个进度条,值的范围为从 0 到 1,其中 0 表示进度条填充了 0%,而 1 表示进度条 100% 完全填充。
usingUnityEditor;usingUnityEditor.PackageManager;usingUnityEngine;usingUnityEngine.UIElements;publicclassEditorGUIExample:EditorWindow{float armor =20;float damage =80;[MenuItem("Examples/ProgressBar")]staticvoidInit(){EditorWindow window =GetWindow<EditorGUIExample>();
window.position =newRect(0,0,350,70);
window.Show();}voidOnGUI(){
armor = EditorGUI.IntSlider(newRect(3,3, position.width -6,15),"Armor", Mathf.RoundToInt(armor),0,100);
damage = EditorGUI.IntSlider(newRect(3,25, position.width -6,15),"Damage", Mathf.RoundToInt(damage),0,100);
EditorGUI.ProgressBar(newRect(3,45, position.width -6,20), armor /100,"Armor");
EditorGUI.ProgressBar(newRect(3,70, position.width -6,20), damage /100,"Damage");}}
3.17 帮助框:HelpBox
- HelpBox :创建一个带有发送给用户的消息的帮助框。
EditorGUI.HelpBox(newRect(0,0,10,10),"message", MessageType.Info);
3.18 Inspector标题栏:InspectorTitlebar
- InspectorTitlebar :创建一个类似于 Inspector 窗口的标题栏。
usingUnityEditor;usingUnityEditor.PackageManager;usingUnityEngine;usingUnityEngine.UIElements;publicclassEditorGUIExample:EditorWindow{bool showing =true;[MenuItem("Examples/InspectorTitlebar")]staticvoidInit(){EditorWindow window =GetWindow<EditorGUIExample>();
window.position =newRect(0,0,350,70);
window.Show();}voidOnGUI(){var currObj = Selection.activeTransform;
showing = EditorGUI.InspectorTitlebar(newRect(0,0, position.width,20), showing, currObj, showing);}}
3.19 文本:FloatField、IntField、LabelField、LongField、MultiFloatField、MultiIntField、MultiPropertyField、TextArea、TextField、PasswordField
- FloatField :创建一个用于输入浮点数的文本字段。
- IntField :创建一个用于输入整数的文本字段。
- LabelField :创建一个标签字段。(用于显示只读信息。)
- LongField :创建一个用于输入长整数的文本字段。
- MultiFloatField :创建一个带有文本字段的多控件,用于在同一行中输入多个浮点值。
- MultiIntField :创建一个带有文本字段的多控件,用于在同一行中输入多个整数。
- MultiPropertyField :创建一个在同一行中包含多个属性字段的多控件。
- TextArea :创建一个文本区域。
- TextField :创建一个文本字段。
- PasswordField :创建一个可让用户输入密码的文本字段。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{float FloatField =0;int IntField =0;long LongField =0;float[] numbers =newfloat[]{0,1,2};GUIContent[] contents =newGUIContent[]{newGUIContent("X"),newGUIContent("Y"),newGUIContent("Z")};string note ="Notes:";string PasswordField ="";string objNames ="";[MenuItem("Examples/Slider")]staticvoidInit(){EditorWindow window =GetWindow<EditorGUIExample>();
window.position =newRect(0,0,350,70);
window.Show();}voidOnGUI(){
FloatField = EditorGUI.FloatField(newRect(0,0,200,20),"FloatField:", FloatField);
IntField = EditorGUI.IntField(newRect(0,20,200,20),"IntField:", IntField);
LongField = EditorGUI.LongField(newRect(0,40,200,20),"LongField:", LongField);
EditorGUI.LabelField(newRect(0,60, position.width,20),"LabelField", EditorApplication.timeSinceStartup.ToString());
EditorGUI.MultiFloatField(newRect(0,100,200, EditorGUIUtility.singleLineHeight),newGUIContent("位置点"), contents, numbers);
note = EditorGUI.TextArea(newRect(0,150,100,30), note);
objNames = EditorGUI.TextField(newRect(0,190, position.width -20,20),"TextField:",
objNames);
PasswordField = EditorGUI.PasswordField(newRect(0,210,100,20), PasswordField);}}
3.20 通用弹出选择字段:Popup
- Popup :创建一个通用弹出选择字段,以参数形式获取当前所选的索引,并返回用户选择的索引。
usingUnityEditor;usingUnityEditor.PackageManager;usingUnityEngine;usingUnityEngine.UIElements;publicclassEditorGUIExample:EditorWindow{string[] options ={"Rigidbody","Box Collider","Sphere Collider"};int index =0;[MenuItem("Examples/ProgressBar")]staticvoidInit(){EditorWindow window =GetWindow<EditorGUIExample>();
window.position =newRect(0,0,350,70);
window.Show();}voidOnGUI(){
index = EditorGUI.Popup(newRect(0,0, position.width,20),"Component:",
index,
options);}}
3.21 单选枚举:EnumPopup
- EnumPopup :创建一个枚举弹出选择字段。
usingUnityEditor;usingUnityEditor.PackageManager;usingUnityEngine;usingUnityEngine.UIElements;publicclassEditorGUIExample:EditorWindow{OPTIONS display = OPTIONS.Position;publicenumOPTIONS{
Position =0,
Rotation =1,
Scale =2,}[MenuItem("Examples/ProgressBar")]staticvoidInit(){EditorWindow window =GetWindow<EditorGUIExample>();
window.position =newRect(0,0,350,70);
window.Show();}voidOnGUI(){
display =(OPTIONS)EditorGUI.EnumPopup(newRect(3,3, position.width -6,15),"Show:",
display);}}
3.22 多选枚举:EnumFlagsField
- EnumFlagsField :单击时显示一个菜单,其中包含针对枚举类型的每个值的选项。名称为“Nothing”的值 0 选项和名称为“Everything”的值 ~0(即所有位设置)选项始终显示在菜单顶部。值 0 和 ~0 的名称可以通过在枚举类型中定义这些值来覆盖。
usingUnityEditor;usingUnityEngine;publicclassEditorGUIExample:EditorWindow{enumExampleFlagsEnum{
None =0,
A =1<<0,
B =1<<1,
AB = A | B,
C =1<<2,
All =~0,}ExampleFlagsEnum m_Flags;[MenuItem("Examples/EnumFlagsField Example")]staticvoidOpenWindow(){GetWindow<EditorGUIExample>().Show();}voidOnGUI(){
m_Flags =(ExampleFlagsEnum)EditorGUI.EnumFlagsField(newRect(5,5,300,20), m_Flags);}}
3.23 单选/多选整型:IntPopup、MaskField
- IntPopup :创建一个整数弹出选择字段。
- MaskField :创建一个适用于掩码的字段。
usingUnityEditor;usingUnityEditor.PackageManager;usingUnityEditor.UIElements;usingUnityEngine;usingUnityEngine.UIElements;usingstaticUnity.IO.LowLevel.Unsafe.AsyncReadManagerMetrics;publicclassEditorGUIExample:EditorWindow{int flags =0;string[] options ={"CanJump","CanShoot","CanSwim"};int selectedSize =1;string[] names ={"Double","Triple","Quadruple"};int[] sizes ={2,3,4};[MenuItem("Examples/Mask Field Usage")]staticvoidInit(){var window =GetWindow<EditorGUIExample>();
window.Show();}voidOnGUI(){
flags = EditorGUI.MaskField(newRect(0,0,300,20),"Player Flags", flags, options);
selectedSize = EditorGUI.IntPopup(newRect(0,30, position.width -6,20),"Size:",
selectedSize,
names,
sizes);}}
版权归原作者 游戏开发小Y 所有, 如有侵权,请联系我们删除。