拓展编辑器(十)_拓展继承组件
拓展继承组件
有些系统组件可能在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面板的上方。效果如图所示: