拓展編輯器功能--Unity自定義編輯器視窗
阿新 • • 發佈:2019-02-18
最近學習了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等待編譯完即可看到效果,不需要將該指令碼掛載在某個遊戲物體上,也不需要點選遊戲執行才能看到效果。