Unity编辑器拓展(三)-拓展Inspector窗口

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

        
    }
}

猜你喜欢

转载自blog.csdn.net/aaa27987/article/details/130071370