我在Unity 5.6中创建了一个基于插件的C#应用程序,有时可能会安装一些插件,有时候不会安装。
在我的插件Plugin1
中,我有一个组件Plugin1.Component1
。在同一个项目中,我为它实现了一个名为Plugin1.Component1Editor
的自定义编辑器,它是[CustomEditor(typeof(Plugin1.Component1))]
。安装Plugin1
后,Component1
可用,并使用自定义编辑器进行渲染。
我的插件Plugin2
取决于Plugin1
。根据其组件Plugin2.Component2
中的设置,它希望更改Plugin1.Component1
的自定义编辑器。
我在Plugin2
中实施了一个名为Plugin2.Component1Editor
的新自定义编辑器,该编辑器也是[CustomEditor(typeof(Plugin1.Component1))]
。它继承自UnityEditor.Editor
,而不是Plugin1.Component1Editor
,因为后者导致Plugin1.Component1Editor
中找不到序列化属性的问题。
Plugin2.Component1Editor
在编译时不会与Plugin1.Component1Editor
冲突,因为它有自己的命名空间。但Unity检查员实际发生了什么?
测试时的行为是所需的行为:Plugin2.Component1Editor
呈现检查器,除非未安装Plugin2
。但为什么?
除非我知道原因,否则我不想相信会继续这样做。
谢谢!
编辑:我错了,它没有渲染Plugin2.Component1Editor
,它是默认的Unity编辑器运行。我的自定义编辑器都没有使用。如何指定我想使用哪一个?
答案 0 :(得分:0)
似乎解决方案确实是继承。
我使Plugin1.Component1Editor
处理了序列化属性,并将其检索保护而不是私有,然后Plugin2.Component1Editor
继承自Plugin1.Component1Editor
而不是UnityEditor.Editor
。然后Plugin2.Component1Editor
成为渲染者,根据需要调用Plugin1.Component1Editor
。
解决方案的主要部分是我在OnEnable
中进行了Plugin1.Component1Editor
调用,该调用检索了受保护的序列化属性,以便我可以通过{{Plugin2.Component1Editor
调用它1}}。