1. 程式人生 > >拓展編輯器(二十)_面板拓展(Inspector面板

拓展編輯器(二十)_面板拓展(Inspector面板

  我們的Unity指令碼掛在遊戲物件上時,右側會出現它的詳細資訊面板,這些資訊是根據指令碼中宣告的public可序列化變數而來的。此外,也可以通過EditorGUI來對它進行繪製,讓面板更具可操作性。

Inspector面板

  EditorGUI和GUI的用法幾乎完全一致,目前來說前者多用於編輯器開發,後者多用於釋出後除錯編輯器。即他們都是起輔助作用的。EditorGUI提供豐富的元件非常豐富,常用的繪製元素包括文字,按鈕,圖片和滑動框等。做一個好的編輯器,是離不開EditorGUI的。  

  如圖所示,我們將EditorGUI拓展在Inspector面板上了

  實現程式碼如下所示:

using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif

public class Inspector面板 : MonoBehaviour
{
    public Vector3 scrollPos;
    public int myId;
    public string myName;
    public GameObject prefab;
    public MyEnum myEnum = MyEnum.One;
    public bool toogle1;
    public bool toogle2;
    
public enum MyEnum { One=1, Two } } #if UNITY_EDITOR [CustomEditor(typeof(Inspector面板))] public class Inspector面板Editor : Editor { private bool m_EnableToogle; public override void OnInspectorGUI() { //獲取指令碼物件 Inspector面板 script = target as Inspector面板;
//繪製滾動條 script.scrollPos = EditorGUILayout.BeginScrollView(script.scrollPos, false, true); script.myName = EditorGUILayout.TextField("text", script.myName); script.myId = EditorGUILayout.IntField("text", script.myId); script.prefab = EditorGUILayout.ObjectField("GameObject", script.prefab, typeof(GameObject), true) as GameObject; //繪製按鈕 EditorGUILayout.BeginHorizontal(); GUILayout.Button("1"); GUILayout.Button("2"); script.myEnum = (Inspector面板.MyEnum)EditorGUILayout.EnumPopup("MyEnum:", script.myEnum); EditorGUILayout.EndHorizontal(); //Toogle元件 m_EnableToogle = EditorGUILayout.BeginToggleGroup("EnableToogle", m_EnableToogle); script.toogle1 = EditorGUILayout.Toggle("toogle1", script.toogle1); script.toogle2 = EditorGUILayout.Toggle("toogle2", script.toogle2); EditorGUILayout.EndToggleGroup(); EditorGUILayout.EndScrollView(); } } #endif

  在上述程式碼中,我們將指令碼部分和Editor部分的程式碼合在一個檔案中。如果需要拓展的面板比較複雜,建議分成兩個檔案存放,一個是指令碼另外一個是Editor檔案。

PS:關於EditorGU類中的方法,可以在Unity的API中查詢,也可以參考一下這個:https://www.cnblogs.com/caymanlu/p/5722549.html