Unity,同一类型的多个自定义编辑器

时间:2017-08-22 16:47:40

标签: c# unity3d unity5 unity-editor

我在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编辑器运行。我的自定义编辑器都没有使用。如何指定我想使用哪一个?

1 个答案:

答案 0 :(得分:0)

似乎解决方案确实是继承。

我使Plugin1.Component1Editor处理了序列化属性,并将其检索保护而不是私有,然后Plugin2.Component1Editor继承自Plugin1.Component1Editor而不是UnityEditor.Editor。然后Plugin2.Component1Editor成为渲染者,根据需要调用Plugin1.Component1Editor

解决方案的主要部分是我在OnEnable中进行了Plugin1.Component1Editor调用,该调用检索了受保护的序列化属性,以便我可以通过{{Plugin2.Component1Editor调用它1}}。