Unity中GUI、GUILayout、GUILayoutUtility、EditorGUI、EditorGUILayout、EditorGUIUtility区别
1.解释一下Unity中的编辑器扩展类,分为两组:
- 在编辑器或者Runtime都能使用,命名空间UnityEngine
- GUI: ui系统,包括button,lable,toggle等控件
- GUILayout: 在GUI基础上,控件新增自动布局功能
- GUILayoutUtility: 对布局类的一些补充,工具类。
- 只能在编辑器使用,命名空间UnityEditor
- EditorGUI: 编辑器ui系统,和GUI非常相似,包括button,lable,toggle等控件
- EditorGUILayout: 在EditorGUI基础上,控件新增自动布局功能
- EditorGUIUtility: 对EditorGUILayout的一些补充,工具类。
2.GUI和GUILayout的比较
1.使用GUI和EditorGUI需要手动设置控件的Rect,位置宽高固定,不能自适应宽高,例如:
GUI.Button(new Rect(0, 0, 100, 100),"btn");
EditorGUI.LabelField(new Rect(0, 0, 100, 100),"label");
2.使用GUILayout和EditorGUILayout生成控件是自动布局,不用设置Rect。例如:
GUILayout.Button("btn");
GUILayout.Label("label");
3.GUI、GUILayout、EditorGUI、EditorGUILayout这4个提供的API非常相似,根据自己需求使用即可,可以混用,建议用Layout自动布局类,如果不满足需求,就使用更加灵活的GUI自行布局。
4.GUILayoutUtility和EditorGUIUtility两个类,是给对应的布局类做补充,里面有一些使用接口可用。
3.介绍几个常用的API
函数名 | 描述 |
---|---|
BeginHorizontal | 开始一个水平组并找回其矩形。 |
BeginScrollView | 开始一个自动布局的滚动视图。 |
BeginVertical | 开始一个垂直组并找回其矩形。 |
IntField | 创建一个用于输入整数的文本字段。。 |
LabelField | 生成一个标签字段。(用于显示只读信息。) |
PropertyField | 为 SerializedProperty 生成一个字段。 |
EditorGUILayout官方文档 | GUILayout官方文档 |