首页 > Unity3D频道 > 【Unity3D拓展编辑器】 > Unity3D研究院编辑器之不影响原有布局拓展Inspector(二十四)
2016
03-26

Unity3D研究院编辑器之不影响原有布局拓展Inspector(二十四)

今天无意间发现了一篇好文章,也让我解决了一个很久都没解决的难题。问题是这样的,假如我想去拓展Unity自带的inspector但是并不想影响原有布局。 比如下面这段代码:

我的本意是想在Rect Transform面板的下面去添加一个按钮,可是我一旦调用base.OnInspectorGUI()方法以后,原有的布局都就变了。

Unity3D研究院编辑器之不影响原有布局拓展Inspector(二十四) - 雨松MOMO程序研究院 - 1

 

为什么会影响到原有布局呢?原因是这样的上面的代码是继承Editor的,那么base.OnInspectorGUI()实际上去掉用了Editor类里的OnInspectorGUI()方法,可是RectTransfm的OnInspectorGUI()方法是在RectTransformEditor这个类写的。

但是问题就来了,RectTransformEditor这个类不是一个对外公开的类。所以不能继承它,那也就无法调用它的OnInspectorGUI()方法了,所以就有了上述问题。

这里有一个巧妙的反射方法,完美的解决这个问题。https://gist.github.com/liortal53/352fda2d01d339306e03

理论上unity提供的每一个脚本都有一个 XXXEditor 类 , 用来绘制它的面板。(本文用到的就是 RectTransformEditor)如果你不确定可以去我反编译的代码里面去找。https://bitbucket.org/xuanyusong/unity-decompiled

如下图所示,现在既保留了原有的布局,也可以方便的拓展了。。

Unity3D研究院编辑器之不影响原有布局拓展Inspector(二十四) - 雨松MOMO程序研究院 - 2

版本: Unity5.3.3

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. 在网上看了很多都是关于 Inspector 面板的编辑 却没有关于 Project 和 Hierarchy 或者其它 面板的编辑或者重写。想知道是否有方法可以?我想将project面板里面的部分资源按需求显示到自己创建的窗口当中。

  2. 是个Unity新手, 最近学编辑器拓展方面的知识.在拓展编辑器的时候遇到一个问题想请教一下, 就是一般的变量都可以通过EditorGUILayout.ObjectField()方法在inspector面板上绘出.可是UnityEvent变量应当如何处理, 也就是如何实现UGUI的那种事件拖拽框. 给个方向也行, 拜谢.

    • 另外serializedObject.FindProperty(“m_LocalPosition”);“m_LocalPosition”是获取组件的localPosition属性那么 如何查到不同组件不同属性对应的字符索引呢?比如 recttransform的sizeData所对应的因为。。。。好多报错是null 找不到

  3. 我一直在想办法扩展Macanim State Machine的界面。但我试了只能通过statemachinebehaviour来进行增加和界面的项目。因为statemachinebehaviour是继承自ScriptableObject的,所以没法把场景hierarchy里面的gameobject拖进statemachinebehaviour的脚本的变量那里。但假如我有个需求,需要把gameObject里面的参数放到statemachinebehaviour的脚本那里,随着状态机的状态切换来修改GameObject的参数。这样就可以通过界面的方式来控制在状态切换的时候所修改的参数了。有办法实现么?