【Unity】自定義編輯器窗口——拓展編輯器功能


最近學習了Unity自定義編輯器窗口,下面簡單總結,方便用到時回顧。

新建一個腳本:

using UnityEngine;
using System.Collections;
using UnityEditor;

/// <summary>
/// 自定義的編輯器窗口
/// </summary>
public class MyWindow : EditorWindow {

    string myString = "Hello World !"; // 文本內容
    bool groupEnabled;     // 選項組是否可用
    bool myBool = true;    // 復選框狀態
    float myFloat = 2.33f; // 滑動條的值

    [MenuItem("Extend Windows/MyWindow")]
    public static void ShowWindow()
    {
        // 顯示某個編輯器窗口。傳參即是要顯示的窗口類型(類名)
        EditorWindow.GetWindow(typeof(MyWindow));
    }

    void OnGUI()
    {
        // 文本
        GUILayout.Label("Base Setting");
        // 可以編輯,編輯后用同一個變量保存結果
        myString = EditorGUILayout.TextField("這是文本", myString);

        // 開啟一組選項
        groupEnabled = EditorGUILayout.BeginToggleGroup("Options setting", groupEnabled);
        // 復選框
        myBool = EditorGUILayout.Toggle("這是復選框", myBool);
        // 滑動條
        EditorGUILayout.Slider("這是滑動條", myFloat, 0, 5);
        // 結束這組選項
        EditorGUILayout.EndToggleGroup();
    }
}

寫好腳本后保存,回到Unity等待完編譯,即可看到以下效果:

Unity編輯器頂部的菜單欄多了一項Extend Windows。
這里寫圖片描述

點擊彈出的窗體如下:
這里寫圖片描述

注意點:

  • 創建編輯器菜單項需要使用MenuItem特性。
  • 針對編輯器功能的代碼,需要引入UnityEditor名稱空間。
  • 自定義編輯器窗口類需要繼承EditorWindow類。
  • 繪制窗口的代碼需要寫在OnGUI()函數里。
  • 繪制函數通常在GUILayout、EditorGUILayout這兩個類中。
  • 繪制函數最后通常含有一個可選的參數GUILayoutOption[],這里暫未深入研究。
  • 重要:繪制函數會有返回值(即本次修改結果),這里在Start()函數里聲明了變量用於記錄返回結果,因為OnGUI()函數每幀都會被(可能多次)調用,所以應該每次都把上一次的返回結果作為這一次的默認值填入。否則當前的修改會在下一次OnGUI()中恢復為預設值,即修改無效!!!
  • 使用EditorGUILayout.BeginToggleGroup()開啟一個選項組,
    對應EditorGUILayout.EndToggleGroup()結束一個選項組。
  • 最后,需要在菜單項靜態函數中使用EditorWindow.GetWindow()才能實現點擊該菜單項彈出一個編輯器窗口,參數是要彈出的編輯器窗口(即類名、類型)。
  • 這是編輯器功能(因為繼承的是EditorWindow 類),所以寫完腳本
    保存好后,回到Unity等待編譯完即可看到效果,不需要將該腳本掛載在某個游戲物體上,也不需要點擊游戲運行才能看到效果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM