Unity編輯器拓展(一) Custom Editor Window

文檔 Editor Windows
Unity編輯器拓展(一)
Unity編輯器拓展(二)
Unity編輯器拓展(三)

自定義編輯器窗口 Custom Editor Window

Unity除了自帶的Project窗口,Scene窗口等,還支持自定義窗口。創(chuàng)建自定義窗口的步驟一般為:

  • 創(chuàng)建一個(gè)從 EditorWindow 派生的腳本

  • 使用代碼觸發(fā)窗口顯示自身

  • 為您的工具實(shí)現(xiàn)GUI代碼

實(shí)例:

public class MyWindow : EditorWindow {

    string myString = "Hello World";
    bool groupEnabled;
    bool myBool = true;
    float myFloat = 1.23f;

    // 創(chuàng)建菜單“Window”下子菜單“My Window”
    [MenuItem("Window/My Window")]
    public static void ShowWindow() {

        // 創(chuàng)建一個(gè)MyWindow的可??看翱?        EditorWindow.GetWindow(typeof(MyWindow));
        // 創(chuàng)建一個(gè)標(biāo)題為“My Empty Window”的工具窗口MyWindow
        // // unility: 是否為工具窗口(不可???
        // EditorWindow.GetWindow(typeof(MyWindow), false, "My Empty Window");
        // // 創(chuàng)建一個(gè)Rect(0, 0, 100, 150)的窗口
        //EditorWindow.GetWindowWithRect(typeof(MyWindow), new Rect(0, 0, 100, 150));
    }

    private void OnGUI() {
        Debug.Log("OnGUI()");

        // 創(chuàng)建Base Settings
        GUILayout.Label("Base Settings", EditorStyles.boldLabel);     // 創(chuàng)建一個(gè)粗體 Label
        myString = EditorGUILayout.TextField("Text Field", myString); // 為myString創(chuàng)建TextField

        // 創(chuàng)建Optional Settings
        groupEnabled = EditorGUILayout.BeginToggleGroup("Optional Settings", groupEnabled);
        myBool = EditorGUILayout.Toggle("Toggle", myBool);          // 為myBool創(chuàng)建Toggle
        myFloat = EditorGUILayout.Slider("Slider", myFloat, -3, 3); // 為myFloat創(chuàng)建Slider(取值范圍-3~3)
        EditorGUILayout.EndToggleGroup(); // 一個(gè)ToggleGroup必須包含Begin-End
    }
}

運(yùn)行效果如圖:


消息事件

  • Awake:當(dāng)新窗體被打開時(shí)回調(diào)
  • OnDestroy:當(dāng)關(guān)閉窗體時(shí)被回調(diào)
  • OnFocus:當(dāng)窗體獲取到焦點(diǎn)時(shí)回調(diào)
  • OnLostFocus:當(dāng)窗體失去焦點(diǎn)時(shí)回調(diào)
  • OnGUI:繪制時(shí)回調(diào),用來(lái)實(shí)現(xiàn)我們自定義的 GUI
  • OnHierarchyChange:當(dāng)編輯器的 Hierarchy 有變化時(shí)回調(diào)
  • OnProjectChange: 當(dāng)編輯器的 Project 有變化時(shí)回調(diào)
  • OnSelectionChange:當(dāng)編輯器中選中的對(duì)象有變換時(shí)回調(diào)
  • OnInspectorUpdate:每秒調(diào)用10幀,為了給Inspector更新變化
  • Update:在可顯示的情況下每秒調(diào)用許多次

點(diǎn)擊觸發(fā)打開MyWindow時(shí):Awake -> OnEnable -> OnFocus -> 多個(gè) OnGUI

點(diǎn)擊關(guān)閉MyWindow時(shí):多個(gè) OnGUI -> OnLostFocus -> OnDisable -> OnDestroy

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Babybus-u3d技術(shù)交流-Unity3d UnityEditor編輯器定制和開發(fā)插件 如何讓編輯器運(yùn)行你的代...
    Babybus_Unity閱讀 5,663評(píng)論 1 6
  • 1、窗體 1、常用屬性 (1)Name屬性:用來(lái)獲取或設(shè)置窗體的名稱,在應(yīng)用程序中可通過(guò)Name屬性來(lái)引用窗體。 ...
    Moment__格調(diào)閱讀 4,753評(píng)論 0 11
  • Unity UI架構(gòu)設(shè)計(jì)理念 1.以ARPG為例,多個(gè)場(chǎng)景會(huì)反復(fù)出現(xiàn)相同的“UI窗體”,造成多個(gè)場(chǎng)景中反復(fù)加載相同...
    Magic_Dong閱讀 15,367評(píng)論 2 29
  • Problem Description 統(tǒng)計(jì)給定的n個(gè)數(shù)中,負(fù)數(shù)、零和正數(shù)的個(gè)數(shù)。 Input 輸入數(shù)據(jù)有多組,每...
    persistent100閱讀 646評(píng)論 0 0
  • “來(lái),陽(yáng)光,來(lái)看看我愛的贊歌?!? 大樹這樣說(shuō),她把她的孕育一個(gè)夏天的愛,釀成愛的紅葉。 這時(shí),...
    今晚扁老虎閱讀 372評(píng)論 1 0

友情鏈接更多精彩內(nèi)容