1. 程式人生 > >拓展編輯器功能--Unity自定義編輯器視窗

拓展編輯器功能--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等待編譯完即可看到效果,不需要將該指令碼掛載在某個遊戲物體上,也不需要點選遊戲執行才能看到效果。