EditorGUI
一、定义
EditorGUI 类似于GUI 是一个主要用于绘制编辑器拓展 UI 的工具类 它提供了一些 GUI 中没有的API 主要是 编辑器功能中会用到的一些 特殊控件
而EditorGUILayout 类似于GUILayout 是一个带有自动布局功能的 EditorGUI 绘制工具类
我们经常会将 EditorGUI 和 GUI 混合使用 来制作一些编辑器拓展功能 但是由于更多时候我们会用到自动布局功能 因此现们接下来着重讲解EditorGUILayout中的功能 EditorGUI和它的区别仅仅是需要自己设置位置布已
二、文本、层级和标签、颜色拾取 控件
1.文本控件
1
2EditorGUILayout.LabelField("文本标签1");
EditorGUILayout.LabelField("文本标签2","测试内容");
1
2
3
4
5
6//层级
layer = EditorGUILayout.LayerField(layer);
layer = EditorGUILayout.LayerField("层级标签",layer);
//标签
tag = EditorGUILayout.TagField(tag);
tag = EditorGUILayout.TagField("标签标签", tag);
3. 颜色获取
1
2
3
4
5
6
7//颜色获取
//参数一:GUIContent 标签
//参数二:颜色变量
//参数三:是否显示拾色器
//参数四:是否显示Alpha通道
//参数五:是否使用支持HDR
color = EditorGUILayout.ColorField(new GUIContent("自定义颜色获取"), color, true, true, true);
三、枚举、整数选择、按下触发按钮 控件
1.枚举控件
单选枚举
type = (E_TestEnum)EditorGUILayout.EnumPopup("枚举选择",type);
多选枚举
type2 = (E_TestEnum)EditorGUILayout.EnumFlagsField("多选枚举", type2);
2.整数选择控件
1 | //参数一:Label标题 |
3.按下按钮触发控件
1 | //按下触发按钮控件 |
四、对象关联、各类型输入
1.对象关联
1 | //各对象关联 |
2.各类型输入
注意: EditorGUILayout中还有一些Delayed开头的输入控件 他们和普通的输入控件最主要的区别是:在用户按Enter键时或将焦点移出控件前,不会立马改变数值 1
2
3
4
5//XX变量 = EditorGUILayout。XXField("label标签",XX变量);
//例如:
//str = EditorGUILayout.TextField("字符串输入框",str);
//int = EditorGUILayout.IntField("整数输入框",int);
i = EditorGUILayout.IntField("整数输入框",i);
五、折叠和折叠组
注意: 折叠和折叠组的区别只是表现上的不同 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23//折叠控件
//参数一:折叠状态
//参数二:折叠标题
//参数三:是否允许点击文字触发
isHide = EditorGUILayout.Foldout(isHide, "折叠控件",true);
if (isHide)
{
//枚举选择控件
type = (E_TestEnum)EditorGUILayout.EnumPopup("枚举选择",type);
//多选枚举
type2 = (E_TestEnum)EditorGUILayout.EnumFlagsField("多选枚举", type2);
}
//折叠组控件
//和折叠空间仅有表现上的不同
isHideGroup = EditorGUILayout.BeginFoldoutHeaderGroup(isHideGroup, "折叠组控件");
if (isHideGroup)
{
//枚举选择控件
type = (E_TestEnum)EditorGUILayout.EnumPopup("枚举选择",type);
//多选枚举
type2 = (E_TestEnum)EditorGUILayout.EnumFlagsField("多选枚举", type2);
}
EditorGUILayout.EndFoldoutHeaderGroup();
六、开光和开关组
1 | //开关控件 |
七、滑动条、双块滑动条控件
1.滑动条
1 | //滑动条 |
### 2. 双块滑动条 1
2
3
4//双块滑动条
EditorGUILayout.MinMaxSlider("双块滑动条", ref leftValue, ref rightValue, 0, 100);
EditorGUILayout.LabelField("左值:" + leftValue.ToString());
EditorGUILayout.LabelField("右值:" + rightValue.ToString());
八、帮助框、间隔控件
1.帮助框
1 | EditorGUILayout.HelpBox("一般内容", MessageType.None); |
### 2.间隔控件 1
2
3
4
5EditorGUILayout.LabelField("间隔控件1");
EditorGUILayout.Space(50);
EditorGUILayout.LabelField("间隔控件2");
EditorGUILayout.Space(100);
EditorGUILayout.LabelField("间隔控件3");
九、动画曲线控件、布局api
1 | //---动画曲线控件--- |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---布局api---
//---------
EditorGUILayout.BeginHorizontal();//开始水平布局
//一堆控件
EditorGUILayout.LabelField("控件1");
EditorGUILayout.LabelField("控件2");
EditorGUILayout.LabelField("控件3");
EditorGUILayout.EndHorizontal();//结束水平布局
//----------
//----------
EditorGUILayout.BeginVertical();//开始垂直布局
//一堆控件
EditorGUILayout.LabelField("控件1");
EditorGUILayout.LabelField("控件2");
EditorGUILayout.LabelField("控件3");
EditorGUILayout.EndVertical(); //结束垂直布局
//----------
vecPos =EditorGUILayout.BeginScrollView(vecPos);//开始滚动视图
//一堆控件
EditorGUILayout.EndScrollView();//结束布局
//----------
