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