Editor类和EditorWindow类都继承自同一个基类:ScriptableObject,他们均可以针对某种脚本类来进行操做
Editor类只能对指定脚本进行扩展,Inspector面板的显示,或变量在Scene视图中的可视化ide
使用到的类:
——GUILayout:绘制各类2D控件,好比按钮、文本、可折叠列表,以及对它们的分组和排版。这些控件既能够绘制在Editor类里,也能够绘制在EditorWindow里
——EditorGUILayout:与GUILayout相似,可是提供更多的预约义控件
——GUIUtility:绘制自定义的2D控件,好比进度条、对话框、打开文件夹
——EditorGUIUtility:绘制自定义的2D控件,好比进度条、对话框、打开文件夹spa
重写OnInspectorGUI方法进行绘制code
例如一个正常继承MonoBehaviour的脚本Test,定义了一个float类型的公有变量move_speed和一个float类型的公有变量rotation_speed,以及一个bool类型的isMove
如上图所示,Inspector面板中显示定义的三个参数,可是这样赋值时容易产生混淆,因此如今咱们有这样一个需求,当isMove勾选上则面板上显示move_speed变量,当isMove未勾选上则面板上显示rotation_speed变量blog
新建一个脚本(通常命名为须要被扩展的脚本名+Editor,例如Test脚本的Inspector扩展类命名为TestEditor),脚本须要继承自Editor,咱们知道自定义的Window窗口须要在OnGUI中绘制,而自定义的Inspector面板须要在OnInspectorGUI中绘制继承
using UnityEditor; using UnityEngine; [CustomEditor(typeof(Test))] public class TestEditor : Editor { public override void OnInspectorGUI() { Test t = (Test)target; t.isMove = EditorGUILayout.Toggle("是否为移动", t.isMove); if (t.isMove) { EditorGUILayout.FloatField("移动速度", t.move_speed); } else { EditorGUILayout.FloatField("旋转速度", t.rotation_speed); } } }