由于unity只支持c#(从2018版本之后不再兼容JavaScript),所以跨平台是借助Mono实现,首先将代码编译成CIL(虽然是以.exe形式,但实质上是CIL),然后在不同平台上运行时,由Mono再次将CIL编译成目标平台的代码。说的普通点,mono就是.net的虚拟机。至于CIL到底是个什么,可以参考https://www.cnblogs.com/murongxiaopifu/p/4211964.html
最后总结起来U3D跨平台的原因:
- CIL是CLI标准定义的一种可读性较低的语言。
- 以.NET或mono等实现CLI标准的运行环境为目标的语言要先编译成CIL,之后CIL会被编译,并且以位元码的形式存在(源代码--->中间语言的过程)。
- 这种位元码运行在虚拟机中(.net mono的运行时)。
- 这种位元码可以被进一步编译成不同平台的原生代码(中间语言--->原生代码的过程)。
- CIL面向对象
- CIL基于堆栈