自定義編輯器窗口 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