1. 原始类继承MonoBehaviour,如
public class Map : MonoBehaviour
{
public int x;
public int y;
}
可以看到原始的效果,如下图
2. 创建编辑器类,继承Editor,增加CustomEdtior注解
接下来我们需要创建一个类继承Editor,并增加CustomEdtior注解,代码如下
//typeof里写要重写Inpsctor事件的类。这里是Map
[CustomEditor(typeof(Map))]
public class MapEditor : Editor
{
}
3. 重写OnInspectorGUI()方法
代码如下
[CustomEditor(typeof(Map))]
public class MapEditor : Editor
{
public override void OnInspectorGUI()
{
//绘制原来的窗口,如不增加此行代码。那么就不会绘制原有的变量
DrawDefaultInspector();
//接下来,可以在下面添加你个性化的组件
//添加一个按钮
if (GUILayout.Button("测试"))
{
Debug.Log("test");
}
}
}
我们平常的需求都是在原有的基础上加按钮或其他操作,所以这里核心的 DrawDefaultInspector(); 要加上,这样会绘制原来的变量。 不添加的话,原本的变量就不显示出来,除非自己也写一遍。
好了,写完效果如下,按钮就出来了
另外,既然我们为Map重写窗口,那常见的业务是拿到Map类。可以通过下面代码来拿到map
Map map = target as Map;
整体代码如下
[CustomEditor(typeof(Map))]
public class MapEditor : Editor
{
private Map map;
public override void OnInspectorGUI()
{
//绘制原来的窗口,如不增加此行代码。那么就不会绘制原有的变量
DrawDefaultInspector();
//接下来,可以在下面添加你个性化的组件
//添加一个按钮
if (GUILayout.Button("测试"))
{
Debug.Log("test");
//拿到原脚本
map = target as Map;
Debug.Log($"map.x:{map.x} map.y:{map.y}");
}
}
}