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的更多相关文章

  1. Unity Inspector面板常用的属性

    在扩展Unity的时候,往往会用到一些属性,这里将常用的列一下. 1.属性只读: #if UNITY_EDITOR using UnityEditor; #endif using UnityEngin ...

  2. 扩展Unity的方法

    写更少代码的需求 当我们重复写一些繁杂的代码,或C#的一些方法,我们就想能不能有更便捷的方法呢?当然在unity中,我们对它进行扩展. 对unity的类或C#的类进行扩展有以下两点要注意: 1.这个类 ...

  3. Unity Inspector添加自定义按钮(Button)

    在Unity开发游戏的时候,为了有一个更快更方便的工作流,我们往往会在Editor下开发一些方便实用的工具.在工具中,用到最多,最关键的就是按钮,它是工具的首席执行官.下面就用最简单的代码来演示添加一 ...

  4. unity, inspector listview

    inspector中实现列表框: public override void OnInspectorGUI(){ bool isDoubleClick=false;        Event e = E ...

  5. Unity Inspector 给组件自动关联引用(二)

    通过声明的变量名称,主动关联引用. 使用这个关联引用两种方式1.  给你组件继承  MonoAutoQuote 点击组件inspector 按钮执行2.  给你组件类添加[AAutoQuote] 特性 ...

  6. unity, inspector debug

    以前经常因为脚本中private变量不在inspector界面中显示,不方便观察其值的变化,所以本该用private的用了public. 今天发现,原来inspector有个选项,如图,平常勾选的是N ...

  7. unity inspector 自动装载Commont和Prefab属性

    在使用unity的过程中,经常遇到这样的问题:每次都需要手动为序列化属性拖拽赋值.像这样: 试着找了找,真的找到了一份代码,但是缺少自动装载Prefab的功能.之后我花了点时间添加这个功能. 使用方法 ...

  8. Unity Inspector 给组件自动关联引用

    项目进入上线阶段了, 有一些地方需要总结和优化.  我发现UI一改变,我就要拖很久的UI. UI结构发生改变我还必须给一些变量设置好引用,后来我去看别人预设的时候组件拖放的变量至少10个以上, 它们一 ...

  9. Unity Scene为每一个游戏物体进行扩展编辑

    2个月前还在忙碌的找实习工作,看见招聘信息上面有一条熟悉扩展Unity编辑器,配合美工编程. 自己动手写完这个代码时候,发现写代码就像弹钢琴多么神奇. TestEdit类: using UnityEn ...

随机推荐

  1. Angular总结二:Angular 启动过程

    要弄清楚 Angular 的启动过程,就要弄明白 Angular 启动时加载了哪个页面,加载了哪些脚本,这些脚本做了哪些事? 通过 Angular 的编译依赖文件 .angular-cli.json ...

  2. nodejs11安装教程(升级最新版本)

    nodejs需要不断升级,那么电脑如何安装nodejs11呢,下面将通过亲身实践来详细介绍   工具/原料   电脑 nodejs11安装包 方法/步骤     访问node11官网,下载安装包,如下 ...

  3. JSTORM 问题排查

    ## 运行时topology的task列表中报"task is dead"错误有几个原因可能导致出现这个错误: 1. task心跳超时,导致nimbus主动kill这个task所在 ...

  4. smooth l1

    1.loss要规范化,这样就不会受图片大小的影响 2.w.h采用log:比较特殊的是w,hw,h的regression targets使用了log space. 师兄指点说这是为了降低w,hw,h产生 ...

  5. Java代码输出到txt文件(申请专利贴源码的必备利器)

    最近公司在申请专利,编写不少文档,项目的代码量实在是过于庞大.如果一个一个的复制粘贴虽然能够完成,但是对于程序员而言实在没有这个必要.shell或者python就能解决这个问题.由于我个人对于shel ...

  6. 在ROS中使用OpenCV

    1.在工作空间下创建程序包 $ cd ~/catkin_ws/src$ catkin_create_pkg robot_vision roscpp std_msgs cv_bridge image_t ...

  7. JS判断指定dom元素是否在屏幕内的方法实例

    前言 刷网页的时候,有时会遇到这样一个情景,当某个dom元素滚到可见区域时,或者图片的懒加载效果,它就会展现显示动画,十分有趣.那么这是如何实现的呢? 实现原理 想要实现这个功能,就要知道具体的实现原 ...

  8. 第一章:AI人工智能 の 数据预处理编程实战 Numpy, Pandas, Matplotlib, Scikit-Learn

    本课主题 数据中 Independent 变量和 Dependent 变量 Python 数据预处理的三大神器:Numpy.Pandas.Matplotlib Scikit-Learn 的机器学习实战 ...

  9. pdf转中文txt

    最近项目需要实现根据关键字搜索pdf内容,实现思路就是提取pdf文本,然后进行索引. 工具上选择: IText 4.16之后采用agpl License,不能用作商用,而且转换中文会有乱码问题, pd ...

  10. PHP/Laravel轻松上传超大文件

    我们知道,在以前,文件上传采用的是直接传整个文件的方式,这种方式对付一些小文件是没有问题的.而当需要上传大文件时,此种方式不仅操作繁琐,需要修改web服务器和后端语言的配置,而且会大量占用服务器的内存 ...