關於擴展編輯器
Unity給我們提供了很好的可視化編程環境,但對於我們有些更懶蛋的程序猿來說,還不夠方便。所以Unity也給我們提供了很友好的擴展方式。
今天來說一下如何自定義一個腳本的inspector面板。
unity中所有編輯器相關的腳本,都放在Editor文件夾,所以建一個先。
假設有個腳本ABC.cs 我們想自定義它的Inspector面板。
現在上代碼:
// 要自定義的腳本 public class ABC : Monobehaviour{ public bool a; public float b; public int c; } // 自定義編輯器腳本 [CustomEditor(typeof(ABC)), CanEditorMutipleObjects] // 這意思就是此腳本為ABC腳本的編輯器腳本,CanEditorMutipleObjects 顧名思義,可以同時編輯多個物體 public class ABC_Editor : Editor{ // 這里用簡單的顯示控制來讓大家理解自定義編輯器的流程 public static SerializedProperty a_prop, b_prop, c_prop; void OnEnable(){ // 三個在ABC.cs中定義的屬性 a_prop = serializedObject.FindProperty("a"); b_prop = serializedObject.FindProperty("b"); c_prop = serializedObject.FindProperty("c"); } public override void OnInspectorGUI(){ // 更新編輯器顯示的序列化屬性 serializedObject.Update(); // 沒什么說的, 顯示屬性 EditorGUILayout.PropertyField(a_prop); // 獲取a的序列化值 bool display = a_prop.boolValue; if(display){ EditorGUILayout.PropertyField(b_prop); float weight = b_prop.floatValue; if(weight > 0.5f) EditorGUILayout.PropertyField(c_prop); } // 接受序列化賦值 serializedObject.ApplyModifiedProperties(); } } // 至此,一個簡單的變量控制相互顯示的例子就完成了。 // 試一下吧!