Unity Editor扩展Inspector窗口
发表于2019-01-10
Unity的Inspector窗口可以实时展示我们的脚本组件上的变量内容,虽然内容不多,但是为了去展示更多的内容或更好的排版,可以通过手写脚本组件的Editor类以实现目的。



Unity Editor下,可以在不改变原有布局的情况下扩展Inspect的窗口。在继承了Editor的类中,有两种实现方式:
using UnityEditor; [CustomEditor(typeof(CustomClass))] public class CustomClassEditor : Editor { public override void OnInspectorGUI() { // 自定义代码 base.OnInspectorGUI(); // 自定义代码 } }
和
using UnityEditor; [CustomEditor(typeof(CustomClass))] public class CustomClassEditor : Editor { public override void OnInspectorGUI() { // 自定义代码 DrawDefaultInspector(); // 自定义代码 } }
当然,这两种方式对开发者自定义的组件的显示是没有问题的,因为自定义的组件本身的绘制方式就是利用的Editor类中的OnInspectorGUI方法。
Unity内置的一些组件,比如说AudioSource这个组件,有的开发者发现扩展了它以后,显示在Inspector中的样式跟默认的有很大区别。
代码:
using UnityEngine; using UnityEditor; [CustomEditor(typeof(AudioSource))] public class CustomAudioSourceEditor : Editor { public override void OnInspectorGUI() { DrawDefaultInspector(); CreateEditor(targets, EditorGUILayout.HelpBox("我最牛逼!", MessageType.Info); } }
原始图片:

修改后图片:

造成这一问题的原因是Unity默认的大部分组件Unity官方代码也通过继承Editor的方式对其样式进行了自定义,因此我们需要得到AudioSource的Editor派生类,调用他的OnInspectorGUI方法。在这里我们通过反射进行调用CreateEditor(targets, typeof(Editor).Assembly.GetType("UnityEditor.AudioSourceInspector")).OnInspectorGUI();来解决样式不一致的问题。
完整代码:
using UnityEngine; using UnityEditor; [CustomEditor(typeof(AudioSource))] public class CustomAudioSourceEditor : Editor { public override void OnInspectorGUI() { CreateEditor(targets, typeof(Editor).Assembly.GetType("UnityEditor.AudioSourceInspector")).OnInspectorGUI(); EditorGUILayout.HelpBox("我最牛逼!", MessageType.Info); } }
如图所示:

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引