EditorWindow 编辑器窗口
EditorWindow是Unity中可以继承、用来扩展编辑窗口的类,通过继承EditorWindow类,可以制作一个自定义的编辑窗口。这通常包括以下几个步骤:
1.定义一个继承至EditorWindow的脚本;
2.通过MenuItem特性定义触发窗口的显示;
3.在OnGUI中定义窗口显示的内容。
1 using UnityEngine; 2 using System.Collections; 3 using UnityEditor; 4 5 public class UIGroupEdit : EditorWindow 6 { 7 public static UIGroupEdit instance; 8 9 void OnEnable() { instance = this; } 10 void OnDisable() { instance = null; } 11 12 int indexOfSide, indexOfClass, indexOfUnit; 13 14 string[] sides = { "BLUE", "RED", "NEUTRALITY" }; 15 string[] classes = { "Infantry" }; 16 string[] units = { "sniper" }; 17 18 Vector3 pos; 19 float dir; 20 21 void OnGUI() 22 { 23 EditorGUILayout.Space(); 24 GUILayout.BeginVertical(); 25 indexOfSide = EditorGUILayout.Popup("Side", indexOfSide, sides); 26 EditorGUILayout.Space(); 27 indexOfClass = EditorGUILayout.Popup("Class", indexOfClass, classes); 28 EditorGUILayout.Space(); 29 indexOfUnit = EditorGUILayout.Popup("Unit", indexOfUnit, units); 30 EditorGUILayout.Space(); 31 pos = EditorGUILayout.Vector3Field("Position", pos); 32 EditorGUILayout.Space(); 33 dir = EditorGUILayout.FloatField("Orientation", dir); 34 EditorGUILayout.Space(); 35 GUILayout.BeginHorizontal(); 36 if (GUILayout.Button("Ok")) 37 { 38 Debug.Log("something..."); 39 } 40 if (GUILayout.Button("Cancel")) 41 { 42 instance.Close(); 43 } 44 GUILayout.EndHorizontal(); 45 GUILayout.EndVertical(); 46 } 47 }
1 using UnityEngine; 2 using System.Collections; 3 using UnityEditor; 4 5 public static class XGUIMenu 6 { 7 [MenuItem("MrXWindow/Edit Group ")] 8 public static void OpenGroupEdit() 9 { 10 EditorWindow.GetWindow<UIGroupEdit>(false, "Edit Group", true).Show(); 11 } 12 }
以上定义了一个自定义编辑窗口,在窗口中定义了几个选择列表、一个Vector3、一个float编辑框、2个button按钮,效果如下:
这样我们就创建一个标准的、可停靠的编辑器窗口,我们可以通过点击菜单项“MrXWindow”→“Edit Group”或者通过快捷键Alt+Shift+2来让窗口显示。Unity中的默认行为是重复使用窗口,所以当窗口处于显示状态时,再次选择菜单项的操作将显示当前窗口。