Unity的Inspector窗口可以实时展示我们的脚本组件上的变量内容,但是内容比较简陋,很多时候为了显示更多内容或更好的排版,必须手写脚本组件的Editor类以实现目的。
但是有些基础需求,我希望能默认提供给所有脚本组件使用,而无需为其定制Editor类。后来发现有个插件叫做Odin,它能让任意继承自Monobehaviour的脚本都可以实现其提供的Inspector扩展功能(它把所有脚本都绑定到一个名为OdinEditor的类上,所有OdinEditor的功能都会被触发)。于是我便把它的自动绑定相关代码拿来借用了。
接下来便有了MadEditor这个工具,目前提供了3个功能:
- 把一些数据放到一个容器内
- 展示Property,但是目前只支持部分类型(可扩展)
- 展示Method,把部分方法以按钮的形式表现出来,点击按钮就执行方法
下图是功能展示:
上面的功能都无需手写Editor,只要在字段和方法上添加指定的Attribute即可,所有功能均由MadEditor实现。
最后简要说说原理:
Unity编辑器会检查所有Editor类的派生类,如果某个Editor有CustomEditorAttribute并指定了脚本Type,就会把该脚本类型和Editor类型的特殊关系记录下来,当需要在Inspector中显示脚本时,编辑器会先查找是否有对应的Editor,有就创建该Editor的实例,没有则创建默认Editor