Unity拓展編輯器 —— EditorWindow(一)

我們在操作unity中會經常遇到這樣那樣的窗口。

Inspector窗口,Console窗口,Hierarchy窗口,等 這些都是unity內置的。

 

又或者說你看到人家插件的窗口,花花綠綠的,自己也想寫一個拿來學習(裝逼)

unity已經爲開發者做了很多支持。 還是去看api,全英文我怎麼看的懂,找翻譯,找度娘,不要找藉口

廢話不多說,上車了。

傳送門官方EditorWindow   API   https://docs.unity3d.com/ScriptReference/EditorWindow.html

具體參數我就暫時不介紹了。 太多 講不過來,自己慢慢試(狗頭保命.png)

 

 

BeginArea 在固定的屏幕區域開始GUI控件的GUI佈局塊。
BeginHorizontal 開始水平對照組。
BeginScrollView 開始一個自動佈局的滾動視圖。
BeginVertical 開始一個垂直控制組。
Box 製作一個自動佈局框。
Button 做一個單一的按鈕。
EndArea 關閉一個以BeginArea開始的GUILayout塊。
EndHorizontal 關閉一組開始與開始橫向。
EndScrollView 以調用開始滾動視圖來結束滾動視圖。
EndVertical 結束一組開始與開始垂直。
ExpandHeight 傳遞給控件以允許或不允許垂直擴展的選項。
ExpandWidth 傳遞給控件以允許或不允許水平擴展的選項。
FlexibleSpace 插入一個靈活的空間元素。
Height 傳遞給控件的選項,使其具有絕對高度。
HorizontalScrollbar 製作一個水平滾動條。
HorizontalSlider 一個水平滑塊,用戶可以拖動來改變最小值和最大值之間的值。
Label 製作一個自動佈局標籤。
MaxHeight 傳遞給控件以指定最大高度的選項。
MaxWidth 傳遞給控件以指定最大寬度的選項。
MinHeight 傳遞給控件以指定最小高度的選項。
MinWidth 傳遞給控件以指定最小寬度的選項。
PasswordField 創建一個用戶可以輸入密碼的文本字段。
RepeatButton 做一個重複按鈕。只要用戶按住不放,按鈕就會返回true
SelectionGrid 製作一個選擇網格。
Space 在當前佈局組中插入空格
TextArea 創建一個多行文本字段,用戶可以在其中編輯字符串。
TextField 創建一個單行文本字段,用戶可以在其中編輯字符串。
Toggle 做一個開關按鈕。
Toolbar 製作一個工具欄
VerticalScrollbar 製作一個垂直滾動條
Width 傳遞給控件的選項,使其具有絕對寬度。
Window  

 

創建文件夾Editor與腳本,位置無所謂,跟 Resources一樣。

然後自己去EditorWindow類中看下,F12,知其然知其所以然

 

上代碼,最簡單的窗口

public class EditorWindowTimor : EditorWindow
{
    [MenuItem("Timor/TimorWindow -- 提莫隊長的窗口")]  //添加菜單選項
    public static void ShowWindow()
    {
        EditorWindow window = EditorWindow.GetWindow(typeof(EditorWindowTimor));
        window.Show();      
    }
}

效果

 

繼續研究GetWindow參數

所以這幾中寫法都沒有問題,自己去改參數,挨個試試

EditorWindow window1 = EditorWindow.GetWindow(typeof(TimorWindow));
EditorWindow window2 = EditorWindow.GetWindow(typeof(TimorWindow), true, "提莫隊長的窗口", true);
EditorWindow window3 = EditorWindow.GetWindow<TimorWindow>();
EditorWindow window4 = EditorWindow.GetWindow<TimorWindow>(true);
EditorWindow window5 = EditorWindow.GetWindowWithRect(typeof(TimorWindow), new Rect(Screen.width / 3, Screen.height / 3, 500, 500), true, "提莫隊長的窗口");

我們去看官方API

參數

t : 窗口類型,記得繼承editorWindow

title :窗口的標題

focus : 是否獲得焦點,默認獲得焦點

utility:是窗口是否浮動,如果是就不能內嵌到unity其他窗口中去,如果不是就能嵌入其他窗口。(可以省略,默認爲內嵌入式)

rect :窗體的出現位置,及窗體大小

 

 窗體事件

using UnityEngine;
using UnityEditor;
 
namespace Timor.Editor
{

    public class TimorFirstWindow : EditorWindow
    {

        [MenuItem("Timor/我的第一個窗口")]
        public static void ShowMyWindow()
        {
            TimorFirstWindow window = EditorWindow.GetWindow<TimorFirstWindow>("提莫的窗口");

            window.Show();
            window.minSize = new Vector2(200, 300);
        }

        #region 窗體事件調用
        private void OnProjectChange()
        {
            Debug.Log("當場景改變時調用");
        }

        private void OnHierarchyChange()
        {
            Debug.Log("當選擇對象屬性改變時調用");
        }

        void OnGetFocus()
        {
            Debug.Log("當窗口得到焦點時調用");
        }

        private void OnLostFocus()
        {
            Debug.Log("當窗口失去焦點時調用");
        }

        private void OnSelectionChange()
        {
            Debug.Log("當改變選擇不同對象時調用");
        }

        private void OnInspectorUpdate()
        {
            Debug.Log("監視面板調用");
        }

        private void OnDestroy()
        {
            Debug.Log("當窗口關閉時調用");
        }

        private void OnFocus()
        {
            Debug.Log("當窗口獲取鍵盤焦點時調用");
        }
        #endregion
    }

}

 

 

 

 

 

 

好了,這些都是空白的窗口,下幾篇講添加內容

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