Unity編輯器擴(kuò)展之EditorWindow
繼承這個(gè)類(lèi)的編輯器腳本可以用來(lái)創(chuàng)建一個(gè)編輯器窗口幔荒,類(lèi)似Inspector窗口
若要在這個(gè)類(lèi)中添加一些控件,可以使用GUI和GUILayout控件梳玫,還可以使用編輯器專(zhuān)用控件EditorGUI/EditorGUILayout
腳本創(chuàng)建
在Assets/Editor文件夾下創(chuàng)建腳本爹梁,并繼承UnityEditor.EditorWindow
在OnGUI函數(shù)中寫(xiě)控件代碼
窗口顯示的觸發(fā)
一般使用MenuItem屬性創(chuàng)建一個(gè)菜單選項(xiàng),點(diǎn)擊后調(diào)用此函數(shù)顯示窗口提澎,如EditorWindow.GetWindow(typeof(MyWindow))
為窗口添加控件
上述提到的EditorGUILayout等類(lèi)中包含類(lèi)各種控件姚垃,比如IntField, IntPopup, IntSlider, Vector2Field, TextField等等
將創(chuàng)建這些控件的代碼放在OnGUI函數(shù)中,則每一次渲染窗口都會(huì)執(zhí)行一次
其他功能
Update():對(duì)于可見(jiàn)窗口盼忌,每秒調(diào)用100次
OnDestroy():關(guān)閉窗口時(shí)調(diào)用
OnFocus():窗口被選中時(shí)調(diào)用
OnLostFocus():窗口不再被選中時(shí)調(diào)用
例子
以下為示例积糯,還可參考Unity官方文檔EditorWindow部分
using UnityEditor;
using UnityEngine;
public class MyExt : EditorWindow {
private int param1 = -1;
private float param2 = 0;
private string name = "";
private int id = 0;
[MenuItem("MyExt/Edit", false, 1)]
private static void Init()
{
MyExt editor = (MyExt)EditorWindow.GetWindow(typeof(MyExt));
editor.Show();
}
void OnGUI()
{
GUILayout.Label("Section1", EditorStyles.boldLabel);
param1 = EditorGUILayout.IntField("param1 int", param1);
if (GUILayout.Button("Load"))
{
Debug.Log("Load");
}
GUILayout.Label("Section2", EditorStyles.boldLabel);
param2 = EditorGUILayout.FloatField("param2 float", param2);
name = EditorGUILayout.TextField("Name", name);
id = EditorGUILayout.IntSlider("id 0~8", id, 0, 100);
}
}