【Unity】編輯器基礎擴展三:EditorWindow自定義窗口

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章