美文网首页
扩展Unity Inspector

扩展Unity Inspector

作者: 码上 | 来源:发表于2018-12-28 18:16 被阅读0次

    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 {

        publicoverride 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 {

        publicoverride void OnInspectorGUI() {

           CreateEditor(targets, typeof(Editor).Assembly.GetType("UnityEditor.AudioSourceInspector")).OnInspectorGUI();

           EditorGUILayout.HelpBox("我最牛逼!",MessageType.Info);

        }

    }

    如图所示:

    更多地Unity技术问题可关注“Paws3D学习中心”:https://www.paws3d.com/learn/

    Unity交流qq群:935714213

    相关文章

      网友评论

          本文标题:扩展Unity Inspector

          本文链接:https://www.haomeiwen.com/subject/cjuelqtx.html