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); } } }