EditorWindow自定义窗口

自定义窗口可以满足更多元化的需求,比如需要按照不同条件一键生成物体时,又或者打包前添加打包数据时,都可以按照自己的需求来绘制自定义窗口以满足开发需求

使用Unity 2017.4.16

注:
1、GetWindow后经测试不需要主动调用Show也可以展示窗口
2、绘制窗口控件可以通过GUILayout和GUI

这里列举一点简单用法,代码:

using UnityEditor;
using UnityEngine;

//继承EditorWindow,可以创建自定义的窗口,自己按照需求绘制窗口
public class BuildWindow : EditorWindow
{
    //添加一个选项按钮,用来创建窗口
    [MenuItem("Window/Create Build Window")]
    static void Create()
    {
        EditorWindow.GetWindow<BuildWindow>("自定义窗口");//参数是窗口标题
        //window.Show();//经测试不需要主动Show也能展示
    }

    string inputString = "";


    //窗口绘制函数,会循环调用绘制
    private void OnGUI()
    {
        //1
        //通过GUILayout来绘制需要的显示控件,系统会自动布局
        GUILayout.Label("这是一个GUILayout创建的文本");//一个普通文本,用来显示信息
        inputString = GUILayout.TextField(inputString);//一个输入文本,每次输入后通过inputString保存输入内容,在下一次OnGUI时再绘制出来
        if (GUILayout.Button("清空"))//没有GUILayoutOption参数,系统自动布局
        {
        	//当点击这个按钮时触发的功能
            inputString = "";
            ShowNotification(new GUIContent("已清空"));//弹出一个提示信息
        }
        if (GUILayout.Button("关闭", GUILayout.Height(30), GUILayout.Width(100)))//通过后面GUILayoutOption参数自定义控件大小
        {
            Close();//关闭窗口
        }


        //2
        //通过GUI来绘制需要的显示控件,不会自动布局,布局需要依靠Rect,当Rect不满足长度或宽度时,多余的会被裁剪掉
        //因为是通过Rect来控制控件的显示区域,所以当两个控件的Rect有重叠时,两个控件就会重叠在一起
        //相比较GUI没有GUILayout灵活
        GUI.Button(new Rect(10, 150, 80, 50), "创建");
        GUI.Label(new Rect(10, 200, 180, 50), "这是一个GUI创建的文本");
        GUI.Label(new Rect(10, 220, 80, 50), "这句话应该有一部分会被裁剪掉,因为太长了");//多余的会被裁剪

        GUI.Label(new Rect(10, 260, 80, 50), "不是按钮");
        GUI.Label(new Rect(10, 260, 80, 50), "这个也不是按钮");
    }
}

窗口展示如下:
在这里插入图片描述

GUILayout博客介绍:https://blog.csdn.net/likendsl/article/details/50254827
GUILayout官方文档:https://docs.unity3d.com/ScriptReference/GUILayout.html
GUI官方文档:https://docs.unity3d.com/ScriptReference/GUI.html

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐