Unity编辑器扩展(自定义窗口)《三》
本文是接着前两篇博客的,这篇主要讲了自定义编辑器窗口
13. 创建自定义的窗口
首先,先了解几个常用的方法。
1.创建的自定义窗口一定要继承EditorWindow。
2.创建窗口的方法:GetWindow(“窗口的名字”);或者GetWindow();他有返回值,返回的是T类型的。
3.窗口的显示方法:Show();
4.垂直布局:GUILayout.BeginVertical() 开始/GUILayout.EndVertical() 结束。
5.水平布局:GUILayout.BeginHorizontal()/GUILayout.EndHorizontal()。
6.创建文本框:GUILayout.Label(“文本框内容”);
7.创建输入框:GUILayout.TextField(“输入框内容”);
8.创建按钮:GUILayout.Button(“按钮的名字”);
9.创建颜色框:EditorGUILayout.ColorField(color);
10.创建枚举框:EditorGUILayout.EnumPopup();
11.创建物体输入框:EditorGUILayout.ObjectField();
12创建Toggle按钮:GUILayout.Toggle();
13:创建空格:GUILayout.Space(空格个数);
14.创建窗口的提示信息:EditorGUILayout.HelpBox(“提示信息内容”,MessageType.Error,true);
15.创建子窗口:GUILayout.Window(); 参数分别为 id,大小位置,创建子窗口的组件的函数,标题
例如:下面这个例子
//枚举
public enum MyEnum
{
A,
B,
C
}
public class CreatMyBox : EditorWindow
{
//需要用到的一些变量
private string names = "请输入想要修改的名字";
public GameObject gameObject;
public MyEnum enums = MyEnum.A;
public Color color = Color.blue;
private bool toggle = false;
private Vector2 ve;
[MenuItem("Window/MyOneBox")]
static void MyOneBox()
{
//创建一个窗口
CreatMyBox myBox=GetWindow<CreatMyBox>(false,"我的第一个窗口");
//把窗口显示出来
myBox.Show();
}
void OnGUI()
{
//垂直布局
GUILayout.BeginVertical(GUILayout.Width(position.width), GUILayout.Height(position.height));
//自定义文字
GUILayout.Label("这里是我做的一个例子", GUILayout.Width(position.width));
GUILayout.Space(5);
//水平布局
GUILayout.BeginHorizontal("box", GUILayout.Width(position.width));
//自定义输入框
names =GUILayout.TextField(names);
int i = 0;
//自定义按钮
if (GUILayout.Button("确认修改"))
{
foreach (GameObject go in Selection.gameObjects)
{
i++;
go.name = names+i;
}
}
GUILayout.EndHorizontal();
GUILayout.Space(5);
GUILayout.BeginHorizontal("box", GUILayout.Width(position.width));
GUILayout.Label("请选择颜色");
//自定义颜色框
color = EditorGUILayout.ColorField(color);
GUILayout.EndHorizontal();
GUILayout.Space(5);
GUILayout.BeginHorizontal("box", GUILayout.Width(position.width));
//自定义枚举框
enums =(MyEnum)EditorGUILayout.EnumPopup(new GUIContent("请选择枚举的类型","枚举的提示信息"), enums);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal("box", GUILayout.Width(position.width));
//自定义物体
gameObject =EditorGUILayout.ObjectField(new GUIContent("物体"), gameObject, typeof(GameObject), true) as GameObject;
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal("box", GUILayout.Width(position.width));
//自定义Toggle按钮
toggle = GUILayout.Toggle(toggle, new GUIContent("是否全屏"));
GUILayout.EndHorizontal();
//自定义提示信息
EditorGUILayout.HelpBox("提示信息",MessageType.Warning,true);
GUILayout.EndVertical();
}
创建子窗口
//首先定义一个位置大小信息
public Rect windowRect = new Rect(0, 0, 200, 200); //子窗口的大小和位置
void OnGUI(){
BeginWindows();
//创建内联窗口,参数分别为id,大小位置,创建子窗口的组件的函数,标题
windowRect = GUILayout.Window(1, windowRect, DoWindow, "子窗口");
EndWindows();
}
void DoWindow(int unusedWindowID)
{
GUILayout.Button("按钮"); //创建button
GUI.DragWindow(); //画出子窗口
}