unity编辑器窗口控件通过EditorGUILayout、EditorGUI、GUILayout和GUI来创建控件和实现布局。
EditorGUILayout、EditorGUI这两个是unity编辑器使用。
而GUILayout和GUI运行时游戏中和编辑器中都可以使用,但是这两个类就是服务于运行时,Monobehaviour的OnGUI()方法大家都知道吧,这两个类就是为OnGUI()的UIhuizhi服务的。
一.各类比较与对应关系
EditorGUILayout和运行时的GUILayout相对应,因为他们的布局方式是一样的,自动水平拉伸布满整个窗口的宽度,每个控件占一大行。这种方式我称它为自动布局吧。
EditorGUI和运行时的GUI相对应,必须设置固定大小和位置。这种方法我称它为手动布局。
下面比较一下效果:
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
public class WinTest : EditorWindow
{
public GameObject go;
SerializedProperty serializedProperty;
SerializedObject serializedObject;
[MenuItem("test/win")]
static void show()
{
EditorWindow.GetWindow<WinTest>().Show();
}
string tagStr = "dd";
string tagStr1 = "dd1";
Object source;
void OnGUI()
{
//自动布局
EditorGUILayout.TextField("自动布局-->EditorGUILayout"); //编辑器使用
GUILayout.TextField("自动布局-->GUILayout"); //运行时使用(编辑器下正常使用)
//手动布局
EditorGUI.TextField(new Rect(0,60,200,20), "手动布局-->EditorGUI"); //编辑器使用
GUI.TextField(new Rect(0, 80, 200, 20), "手动布局-->GUI"); //运行时使用(编辑器下正常使用)
}
}
运行效果:
这里就有点烦蒙了。既然对应的类是一样的,那为什么还定义这么多类,搞的都不知道使用那个了呢。。。
其实unity官方估计是为了把编辑器和运行时的UI分开才定义了这几个相对应的类。看了有些帖子不去区分到底使用哪个类,以至于乱使用。虽说混乱使用不影响功能,但是我还是建议区分开来。下面讲解只说明编辑器类EditorGUILayout和EditorGUI。不再使用运行时的类。
1.EditorGUILayout和EditorGUI
EditorGUILayout包含EditorGUI全部组件。多出了几个布局控件。
EditorGUILayout多出的几个控件如下:
-
Make a small space between the previous control and the foll