拓展编辑器(十)_拓展继承组件

拓展继承组件

  有些系统组件可能在Unity内部已经重写了绘制方法,但是外部是访问不了内部代码的,所以修改起来比较麻烦。如果我们按照前面介绍的方法拓展Transform组件的话,它的面板就会变的非常丑陋,如图所示:

  

  Unity将大量的Editor绘制方法封装在内部的DLL文件里,开发者无法调用它的方法。如果想解决这个问题,可以使用C#反射的方式调用内部未公开的方法。代码如下:

using UnityEngine;
using UnityEditor;
using System.Reflection;

[CustomEditor(typeof(Transform))]
public class 拓展继承组件2:Editor
{
    private Editor m_Editor;
    private void OnEnable()
    {
        m_Editor =CreateEditor(target,
            Assembly.GetAssembly(typeof(Editor)).GetType("UnityEditor." +
            "TransformInspector", true));
    }
    public override void OnInspectorGUI()
    {
        if (GUILayout.Button("拓展按钮"))
        {
        }
        //调用系统的绘制方法
        m_Editor.OnInspectorGUI();

        //base.OnInspectorGUI();
    }
}

   我们通过Assembly.GetAssembly()方法反射得到了Unity.TransformInspector对象,然后重写了OnInspectorGUI()方法。使用GUILayout.Button绘制了自定义的按钮元素,接着调用了m_Editor.OnInspectorGUI()绘制Transform原有面板信息,这样我们拓展的按钮就会显示在Transform面板的上方。效果如图所示:

 

posted @ 2018-11-01 15:12  むふむふ  阅读(283)  评论(0编辑  收藏  举报