UEDL3-2——枚举、选择、按下按钮
UEDL3-2——枚举、选择、按下按钮
本章代码关键字
1 | EditorGUILayout.EnumPopup() //单选枚举选择,将枚举作为选项一样可以选择,需要配套一个枚举变量 |
枚举选择控件
-
单选枚举选择
EnumPopup
在窗口上添加了一个选择某个枚举选项的控件,同样,需要配套一个枚举变量来表示选中了哪个枚举,
需要将该变量传入到方法内,再由该变量接收本帧用户选中的枚举(需要强转为对应的枚举)- 参数一:文本标题(可选,可改为
GUIContent
) - 参数二:显示当前选中的枚举变量(传入在外部声明的相应变量)
- 参数三:
GUIStyle
(可选) - 参数四:
GUILayoutOption
(使用EditorGUI
绘制时可选) - 返回值:本帧用户选中的枚举(需要强转为对应的枚举)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23using UnityEditor;
using UnityEngine;
public enum E_TestType
{
One, Two, Three
}
public class Lesson3 : EditorWindow
{
[ ]
private static void OpenLesson3()
{
Lesson3 window = EditorWindow.GetWindow<Lesson3>("EditorGUI知识讲解窗口");
window.Show();
}
E_TestType type;
private void OnGUI()
{
type = (E_TestType)EditorGUILayout.EnumPopup("枚举选择", type);
}
}显示效果如下:
- 参数一:文本标题(可选,可改为
-
多选枚举选择
注意:多选枚举进行的是或运算,声明枚举时一定注意其中的赋值,并且一定要有多种情况的搭配值
下面的枚举声明中
One_and_Two
就是搭配值,用来表示One
和Two
同时选中的值:1
2
3
4
5
6
7public enum E_TestType
{
One = 1,
Two = 2,
Three = 4,
One_and_Two = One | Two,
}如果没有搭配值,且依旧使用枚举变量去接收选中哪些选项,则多选选项时,枚举变量接收的实际值是无法在枚举声明的字段中找到对应的
例如:如果选中了One
和Two
,则方法会返回One = 1
和Two = 2
的或运算结果3
,
如果在枚举中没有声明3
对应的搭配值One_and_Two
,则返回的结果就不能正常的转换为枚举对应的值,因为没有对应的字段如果枚举不声明搭配值,方法返回结果需要强转为
int
类型的值,你需要通过int
的值来确认选项哪些被选中,可参考:层级参数的填入- 参数一:文本标题(可选,可改为
GUIContent
) - 参数二:显示当前选中的枚举变量(传入在外部声明的相应变量)
- 参数三:
GUIStyle
(可选) - 参数四:
GUILayoutOption
(使用EditorGUI
绘制时可选) - 返回值:本帧用户选中的枚举(如果是枚举变量接收,需要强转为对应的枚举)
EnumFlagsField
在窗口上添加了一个可以多选的枚举选项的控件,同样,需要一个枚举变量来表示选中了哪个枚举,
需要将该变量传入到方法内,再由该变量接收本帧用户选中的枚举值
(需要强转为对应的枚举,如果是多选,则需要枚举对应的搭配值,否则无法正常转换为枚举对应的字段)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23public enum E_TestType
{
One = 1,
Two = 2,
Three = 4,
One_and_Two = One | Two,
}
public class Lesson3 : EditorWindow
{
[ ]
private static void OpenLesson3()
{
Lesson3 window = EditorWindow.GetWindow<Lesson3>("EditorGUI知识讲解窗口");
window.Show();
}
E_TestType type2;
private void OnGUI()
{
type2 = (E_TestType)EditorGUILayout.EnumFlagsField("枚举多选", type2);
}
}显示效果如下:
- 参数一:文本标题(可选,可改为
整数选择控件
IntPopup
需要声明两个数组,一个是字符串数组,另一个是int
数组,以及一个int
变量
字符串数组用来作为各个选项显示的内容(可改为GUIContent
),int
数组用来确认各个选项对应的值,int
变量用于记录选中选项的值
其中int
变量需要传入到方法内,并接收方法返回的值
该控件可以通过SerializedProperty
修改MonoBehaviour
脚本对象的属性,使用SerializedProperty
就不需要配套额外变量
- 参数一:序列化属性SerializedProperty,可直接修改
MonoBehaviour
脚本对象的属性,使用该参数则无需另外配套变量 - 参数二:文本标题(可选,可改为
GUIContent
) - 参数三:显示当前选中的选项的值(传入在外部声明的相应变量,使用
SerializedProperty
则无需传入该参数) - 参数四:各个选项显示的内容(可改为
GUIContent
) - 参数五:各个选项对应的值
- 参数六:
GUILayoutOption
(使用EditorGUI
绘制时可选) - 返回值:本帧选择的选项的值(如果使用序列化属性就不需要接收了)
1 | string[] strs = { "选择123", "选择234", "选择345" }; |
显示效果如下:
按下就触发的按钮控件
DropdownButton
按钮是显示上类似于下拉列表的按钮,即按下就触发,返回当前帧是否被按下的bool
值(按住不返回true
)
-
参数一:标题(仅限
GUIContent
) -
参数二:
FocusType
,该枚举时告诉UI系统能够获得键盘焦点,当用户按Tab键时在控件之间进行切换-
Keyboard
该控件可接收键盘焦点 -
Passive
该控件不能接收键盘焦点
-
-
参数三:
GUIStyle
(可选) -
参数四:
GUILayoutOption
(使用EditorGUI
绘制时可选)
1 | private void OnGUI() |
显示效果如下:
按下即显示: