自定义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"); } }