自定義Inspector面板,需要幾個要素:
1.CustomEditor,
告訴編輯器類它是編輯器的運行時類型。
當為組件創建自定義編輯器時,您需要將該屬性放在編輯器類上。
讓兩個腳本聯系起來,一個是你要自定義Inspector面板的類CubeTerrain,另一個是他對應的編輯器類CubeTerrainEditor (繼承Editor)
2.重寫OnInspectorGUI,看名字也能知道他是重繪inspector的,API解釋是
實現此功能以制作自定義檢查器。
在這個函數內部,你可以為特定對象類的檢查器添加自己的自定義GUI。
3.target獲得正在檢查的對象,在此腳本中對應的對象就是CubeTerrain,API解釋是
正在檢查的對象。
對於支持多對象編輯的編輯器,不應在OnInspectorGUI內部使用目標屬性,因為它只引用編輯對象中的第一個。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; //自定義CubeTerrain的Inspector面板 [CustomEditor(typeof(CubeTerrain))] public class CubeTerrainEditor : Editor { CubeTerrain ct; /// <summary> /// 自定義Inspector /// </summary> public override void OnInspectorGUI() { ct = (CubeTerrain)target; //設置界面垂直布局 GUILayout.BeginVertical(); //空一行 GUILayout.Space(0); EditorGUILayout.LabelField("Base Info"); ct.defualtCube = (GameObject)EditorGUILayout.ObjectField("Defualt Cube:", ct.defualtCube, typeof(GameObject), true); ct.mapLength = EditorGUILayout.IntField("Map Length:", ct.mapLength); ct.mapWidth = EditorGUILayout.IntField("Map Width:", ct.mapLength); ct.mapHeight = EditorGUILayout.IntField("Map Height:", ct.mapLength); if(GUILayout.Button("Create Map", GUILayout.Width(200))){ Debug.Log("創建Map"); } if (GUILayout.Button("Add Length Once", GUILayout.Width(200))) { Debug.Log("長度加一"); } if (GUILayout.Button("Add Width Once", GUILayout.Width(200))) { Debug.Log("寬度加一"); } if (GUILayout.Button("Reduce Length Once", GUILayout.Width(200))) { Debug.Log("長度減一"); } if (GUILayout.Button("Reduce Width Once", GUILayout.Width(200))) { Debug.Log("寬度減一"); } //垂直布局end GUILayout.EndVertical(); GUILayout.Label("This is a Label in a Custom Editor"); } }