自定义编辑器窗口 Custom Editor Window
Unity除了自带的Project窗口,Scene窗口等,还支持自定义窗口。创建自定义窗口的步骤一般为:
-
创建一个从 EditorWindow 派生的脚本
-
使用代码触发窗口显示自身
-
为您的工具实现GUI代码
实例:
public class MyWindow : EditorWindow {
string myString = "Hello World";
bool groupEnabled;
bool myBool = true;
float myFloat = 1.23f;
// 创建菜单“Window”下子菜单“My Window”
[MenuItem("Window/My Window")]
public static void ShowWindow() {
// 创建一个MyWindow的可停靠窗口
EditorWindow.GetWindow(typeof(MyWindow));
// 创建一个标题为“My Empty Window”的工具窗口MyWindow
// // unility: 是否为工具窗口(不可停靠)
// EditorWindow.GetWindow(typeof(MyWindow), false, "My Empty Window");
// // 创建一个Rect(0, 0, 100, 150)的窗口
//EditorWindow.GetWindowWithRect(typeof(MyWindow), new Rect(0, 0, 100, 150));
}
private void OnGUI() {
Debug.Log("OnGUI()");
// 创建Base Settings
GUILayout.Label("Base Settings", EditorStyles.boldLabel); // 创建一个粗体 Label
myString = EditorGUILayout.TextField("Text Field", myString); // 为myString创建TextField
// 创建Optional Settings
groupEnabled = EditorGUILayout.BeginToggleGroup("Optional Settings", groupEnabled);
myBool = EditorGUILayout.Toggle("Toggle", myBool); // 为myBool创建Toggle
myFloat = EditorGUILayout.Slider("Slider", myFloat, -3, 3); // 为myFloat创建Slider(取值范围-3~3)
EditorGUILayout.EndToggleGroup(); // 一个ToggleGroup必须包含Begin-End
}
}
运行效果如图:
消息事件
- Awake:当新窗体被打开时回调
- OnDestroy:当关闭窗体时被回调
- OnFocus:当窗体获取到焦点时回调
- OnLostFocus:当窗体失去焦点时回调
- OnGUI:绘制时回调,用来实现我们自定义的 GUI
- OnHierarchyChange:当编辑器的 Hierarchy 有变化时回调
- OnProjectChange: 当编辑器的 Project 有变化时回调
- OnSelectionChange:当编辑器中选中的对象有变换时回调
- OnInspectorUpdate:每秒调用10帧,为了给Inspector更新变化
- Update:在可显示的情况下每秒调用许多次
点击触发打开MyWindow时:Awake -> OnEnable -> OnFocus -> 多个 OnGUI
点击关闭MyWindow时:多个 OnGUI -> OnLostFocus -> OnDisable -> OnDestroy
网友评论