Unity編輯器擴展——自定義Inspector面板

一:Editor類

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);
        }
    }
}
相關文章
相關標籤/搜索