Unity编辑器扩展(自定义窗口)《三》

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(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();
}

Unity编辑器扩展(自定义窗口)《三》_第1张图片
创建子窗口

  //首先定义一个位置大小信息
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();       //画出子窗口
}

Unity编辑器扩展(自定义窗口)《三》_第2张图片

你可能感兴趣的:(编辑器)