Unity3D 如何能够编译 PhysX?

How is Unity3D Able to Compile PhysX?

Unity3D 使用Mono 将代码编译为纯中间语言以实现交叉兼容(如有错误请指正)。 PhysX 包含本机代码,其中一些无法用纯托管代码 (/clr:pure) 表示。

我知道您不能 link ijw/native 带有纯模块的模块;您不能 link 纯模式下的本机目标文件。然而,Unity3D 似乎通过包含 PhysX 解决了这个问题。 如何?

除了通过 Unity 和 PhysX 合作伙伴关系进行的特殊构建外,我找不到任何可以解释这一点的资源:How does Unity3D use PhysX without requiring the PhysX runtime?

Mono 和 .NET 允许用户通过调用外部库来调用本机 C/C++ 代码。

Unity 有一个名为 IL2CPP 的系统,它采用中间单声道语言并将其转换为 C++(或 asm.js 用于通过 emscripten 构建的 webgl)。这就是 Unity 编译成 iOS 的方式。所有 C#/Unityscript/Boo 代码都转换为 C/C++/Obj-C,然后将其包含到 XCode 项目中,以便您构建和调试 iOS 应用程序。

Unity pro 允许将本机库包含到您的游戏中。这允许您通过包含静态或共享库(取决于平台)并从 C# 调用库来 运行 原始 C/C++ 代码。不仅可能有一个特殊的 PhysX 构建,而且可能通过 Mono 的本机界面访问它。