扩展Unity Inspector

Posted itnantongbao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扩展Unity Inspector相关的知识,希望对你有一定的参考价值。

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

    }

}

 

如图所示:

 技术分享图片

更多地Unity技术问题我们可以在“Paws3D学习中心”进行讨论交流。

以上是关于扩展Unity Inspector的主要内容,如果未能解决你的问题,请参考以下文章

扩展 Unity的 TextureImporterEditor

Unity 扩展编辑器

如何自定义unity的inspector面板

Unity扩展编辑器四

Unity Inspector面板常用的属性

Unity编辑器扩展