Unity3D使用Mono将代码编译为纯中间语言以实现交叉兼容(如果我错了,请纠正我)。 PhysX包含本机代码,其中一些代码无法用纯托管代码表示(/ clr:pure)。
我知道您无法将ijw / native模块与纯模块链接;您无法在纯模式下链接本机对象文件。然而,Unity3D似乎通过包含PhysX来解决这个问题。 如何吗
我找不到任何可以解释这个问题的资源,而不是通过Unity和PhysX合作建议的特殊构建:How does Unity3D use PhysX without requiring the PhysX runtime?
答案 0 :(得分:3)
Mono和.NET允许用户通过调用外部库来调用本机C / C ++代码。
Unity有一个名为IL2CPP的系统,它采用中间单语言并将其转换为C ++(或者通过emscripten将webgl构建为asm.js)。这就是Unity编译到iOS的方式。所有C#/ Unityscript / Boo代码都转换为C / C ++ / Obj-C,然后将其包含在XCode项目中,以便您构建和调试iOS应用程序。
Unity pro允许在您的游戏中包含本机库。这允许您通过包含静态或共享库(取决于平台)并从C#调用库来运行原始C / C ++代码。不仅可能有一个特殊的PhysX版本,但它可能通过Mono的原生界面访问。