简短的回答是,让它工作需要很多工作,可能会导致问题,不推荐使用,除非确实无法避免混合不同的运行时版本。
这个问题已经在这个英语论坛线程上回答了一段时间,我在下面包含了一个机器翻译,其中说明了理论上使其工作所需的问题和必要步骤。 虽然它可能是特定于 Unity 的,但很可能您在使用 cocos 时必须解决类似的问题。
The short answer is that it would be a lot of work to make it work, might cause problems and is not recommended unless it really cannot be avoided to mix different runtime versions.
This question has been answere on this English forum thread a while back, I have included a machine-translation below which states the problems and necessary steps that are required to theoretically make it work. While it might be Unity specific, most likely you will have to tackle similar problems when using cocos.
Two Spine runtimes in the same Unity project?
我们担心这不容易实现。
我们明确建议相应地更新和修改艺术资产,而不是让两个运行时彼此相邻。如果您真的想亲自动手并尝试并排集成两个运行时,您可以继续阅读。
您需要将项目中的所有文件完全分开的两个运行时,以便它们不会引用错误的类。至少需要以下步骤来防止我目前能想到的编译错误:
对于组件类:
您至少需要更改 Unity 通过名称识别的每个旧组件类的名称,例如从 SkeletonAnimation 到 OldSkeletonAnimation,并且还需要更改文件名以匹配组件类名 [1]。 .meta 文件应该保持场景中的旧引用仍然完整。请注意,仅更改命名空间名称对于组件类是不够的。
对于非组件类:
您仍然需要将非组件类彼此分开,这可以通过添加程序集定义文件来完成,该文件可用于创建四个独立的项目:
spine-unity-old.asmdef
用于旧的spine-unity 非编辑器目录
spine-unity-editor-old.asmdef
用于编辑器部分,依赖于 spine-unity-old
此外,对于新的运行时,您可以使用现有的两个 asmdef 文件:
spine-unity.asmdef
spine-unity-editor.asmdef
这足以防止任何参考跨越旧的与新的边界。
上述步骤对于使两个运行时在彼此相邻的情况下进行编译是必要的,但是您可能会面临我们尚未考虑的其他问题,例如各个 Unity 版本中不同 API 或不同行为的问题 - 旧的 Spine 运行时很可能与 Unity 2019 不兼容,而新的运行时与 Unity 4.3 不兼容,以列出一些极端情况。
[1] 理论上您可以在元文件中有两个具有相同名称和不同 GUID 的类,但这将是一个地狱。