EditorGUI相关的内容
- 一、EditorGUI是什么
- 二、文本、层级和标签、颜色拾取控件
- 2.4 效果展示
- 三、枚举选择、整数选择、按下就触发的按钮
- 四、对象关联、各类型输入 控件
- 五、 折叠、折叠组控件
- 六、开关、开关组控件
- 七、 滑动条、双块滑动条控件
- 八、帮助框、垂直间隔 控件
- 九、动画曲线控件和布局API
- 十、总结
一、EditorGUI是什么
1.1 知识回顾
-
GUILayout 是一个GUI自动布局的公共类
-
它其中的方法和GUI基本一模一样,都是用来绘制、响应各种UI控件的
-
只不过它在GUI的基础上加入了自动布局功能
-
我们无需过多的去关心UI控件的位置和大小
-
guilayoutoption 布局选项
- 方法 :GUILayout.Button(“文本”,[guilayoutoption])
- 使用示例:
1 | GUILayout.Button("确定",guilayout.width(300),guilayout.height(200),...) |
- 更多:
1 | //方法 :GUILayout.Button("确定",[guilayoutoption]) |
- 创建一个GUI窗口
1 | [ ] |
1.2 EditorGUI是什么?
-
EditorGUI 类似 GUI,是一个主要用于绘制编辑器拓展 UI 的工具类
- 它提供了一些 GUI 中没有的API,主要是 编辑器功能中会用到的一些特殊控件
-
而EditorGUILayout 类似于 GUILayout,是一个带有自动布局功能的 EditorGUI 绘制工具类
-
我们经常会将 EditorGUI 和 GUI 混合使用 来制作一些编辑器拓展功能
- 但是由于更多时候我们会用到自动布局功能
- 因此着重学习 EditorGUILayout 中的功能
-
EditorGUI和EditorGUILayout的区别仅仅是需要自己设置位置而已
-
更多详细内容:https://docs.unity.cn/cn/2022.3/ScriptReference/EditorGUILayout.html
二、文本、层级和标签、颜色拾取控件
2.1 EditorGUILayout中的文本控件
- 方法
1 | EditorGUILayout.LabelField("文本标题", "文本内容"); |
- 示例
1 | int layer; |
2.2 EditorGUILayout中的层级、标签选择
- 方法
1 | //Layer |
- 示例
1 | //层级标签控件 |
2.3 EditorGUILayout中的颜色获取
- 方法
1 | color变量 = EditorGUILayout.ColorField(new GUIContent("标题"),color变量, 是否显示拾色器, 是否显示透明度通道, 是否支持HDR); |
- 示例
1 | //颜色获取控件 |
2.4 效果展示
三、枚举选择、整数选择、按下就触发的按钮
3.1 枚举选择控件
- 枚举选择(方法)
1 | 枚举变量 = (枚举类型)EditorGUILayout.EnumPopup("枚举选择", 枚举变量); |
- 多选枚举(方法)
注意:多选枚举进行的是或运算,声明枚举时一定注意其中的赋值,并且一定要有多种情况的搭配值),即如果是多选枚举,需要给每个不同的枚举要赋值为2的次方
1 | 枚举变量 = (枚举类型)EditorGUILayout.EnumFlagsField("枚举多选", 枚举变量); |
- 示例
1 | public enum E_TestType |
3.2 整数选择控件
- 方法
1 | int变量 = EditorGUILayout.IntPopup("整数单选框", int变量, 字符串数组, int数组); |
- 示例
1 | //整数选择控件 |
3.3 按下就触发的按钮控件
- 方法
1 | EditorGUILayout.DropdownButton(new GUIContent("按钮上文字"), FocusType.Passive) |
- 参数的类型:
- FocusType枚举时告诉UI系统能够获得键盘焦点 当用户按Tab键时在控件之间进行切换
- Keyboard 该控件可接收键盘焦点。
- Passive 该控件不能接收键盘焦点。
- 示例
1 | //按下就响应的按钮 |
3.4 效果
四、对象关联、各类型输入 控件
4.1 对象关联控件
- 方法
1 | 对象变量 = EditorGUILayout.ObjectField(对象变量, typeof(对象类型), 是否允许关联场景上对象资源) as 对象类型; |
- 示例
1 | GameObject obj; |
4.2 各类型输入控件
- 方法
1 | int变量 = EditorGUILayout.IntField("Int输入框", int变量); |
- 注意:EditorGUILayout中还有一些Delayed开头的输入控件
他们和普通输入控件最主要的区别是:在用户按 Enter 键或将焦点从字段移开之前,返回值不会更改 - 示例
1 | //各类型输入 |
4.3 效果展示
五、 折叠、折叠组控件
5.1 折叠控件
- 方法
1 | bool变量 = EditorGUILayout.Foldout(bool变量, "标题名"); |
- 示例
1 | bool isHide; |
5.2 折叠组控件
配合其他控件使用,避免控件展示过多、或者分类控件
- 方法
两行代码需要成对存在
1 | bool变量 = EditorGUILayout.BeginFoldoutHeaderGroup(bool变量, "标题名",整行是否能点击折叠交互); |
- 示例
1 | bool isHideGroup; |
5.3 折叠和折叠组的区别
折叠组的文本会加粗高亮,并且默认点击整行也会交互展开,主要是表现上的区别。具体看下面效果图
5.4 效果
六、开关、开关组控件
6.1 开关控件
- 方法
1 | bool变量 = EditorGUILayout.Toggle("普通开关", bool变量); |
- 示例
下面与开关组一起写了
6.2 开关组控件
- 方法
1 | bool变量 = EditorGUILayout.BeginToggleGroup("开关组", bool变量); |
- 示例
1 | //开关组控件 |
6.3 效果
七、 滑动条、双块滑动条控件
7.1 知识点一 滑动条控件
- 方法
1 | float变量 = EditorGUILayout.Slider("滑动条", float变量, 最小值, 最大值); |
- 示例
1 | //滑动条 |
7.2 知识点二 双块滑动条控件
- 方法
1 | EditorGUILayout.MinMaxSlider("双块滑动条", ref 左侧值, ref 右侧值, 最小值, 最大值); |
- 示例
1 | //双块滑动条 |
7.3 效果
八、帮助框、垂直间隔 控件
8.1 帮助框控件
- 方法及示例
1 | EditorGUILayout.HelpBox("一般提示", MessageType.None); |
8.2 间隔控件
- 方法及示例
1 | //控件1 |
8.3 效果
九、动画曲线控件和布局API
9.1 动画曲线控件
- 方法
1 | AnimationCurve变量 = EditorGUILayout.CurveField("动画曲线:", AnimationCurve变量); |
- 示例
1 | AnimationCurve curve = new AnimationCurve(); |
9.2 布局相关API
- 方法
1 | EditorGUILayout.BeginHorizontal(); //开始水平布局 |
- 示例
1 | Vector2 vec2Pos; |
9.3 效果
十、总结
EditorGUILayout中更多内容:https://docs.unity.cn/cn/2022.3/ScriptReference/EditorGUILayout.html