天天看點

自定義Inspector檢視面闆

  也可以使用[System.NonSerialized]标記不需要顯示的屬性,比如:

  有的時候對于U3D預設的Inspector不能滿足需求,則可以對特定類型的Inspector面闆進行自定義:編寫一個對應的Editor類,然後重寫其OnInspector方法,比如我們有如下類型:

  然後在Editor目錄下添加如下腳本:

  在OnInspector函數中就可以實作你想要的效果。

   上面的代碼中有幾點需要注意:

  (1)[ExecuteInEditMode()]這個函數可以使代碼在編輯模式下運作,不需要運作遊戲;

  (2)TestInspectorEditor類必須繼承自Editor,CustomEditor告訴U3D哪個組建類型需要自定義,OnInspectorGUI在顯示元件的Inspector面闆時調用;

  (3)SerializedObject序列化物體、SerializedProperty序列化屬性和Editor這三者一起使用,用來通路和更新元件的屬性,SeriailzedProperty能夠以通用的方式通路所有的基礎類型,包括對數組的控制等;

   (4)可以在OnInspectorGUI中調用DrawDefaultInspector函數用來顯示預設的監事面闆内容;

   (5)EditorGUILayout.PropertyField(testObj, true);如果該類型有子節點,第二個參數需要設定為true才能正确的展開;

   (6)[HideInInspector]也可用于隐藏屬性顯示。

******************************************************************************************

  除了自定義Inspector檢視面闆,我們還可以類似的方法自定義場景視圖中對物體的控制,方法是重定義Editor的OnSceneGUI()函數,比如:

  主要是使用Handles編輯器類來進行自定義,該類型提供了很多友善的操作接口,比如DrawLine、DrawCube、DrawBezier等。

  注意,不能在OnSceneGUI中使用SerializedObject。

繼續閱讀