unity的运行
unity程序的跨平台:
mono:
存在的原因:
mono VM或mono CLR(Common Language Runtime)跨平台
什么是mono:
mono出现前,.Net没能实现跨平台;mono遵循了IL规范 ,mono自己实现了各语言到IL的编译器,以及各平台运行的CLR;
转向il2cpp原因:
1.Mono VM在各个平台移植,维护非常耗时,有时甚至不可能完成
Mono的跨平台是通过Mono VM实现的,有几个平台,就要实现几个VM,像Unity这样支持多平台的引擎,Mono官方的VM肯定是不能满足需求的。所以针对不同的新平 台,Unity的项目组就要把VM给移植一遍,同时解决VM里面发现的bug。这非常耗时 耗 力。这些能移植的平台还好说,还有比如WebGL这样基于浏览 器的平台。要让WebGL支持Mono的VM几乎是不可能的。
2.Mono版本授权受限
大家有没有意识到Mono的版本已经更新到3.X了,但是在Unity中,C#的运行时版本一直停留在2.8,这也是Unity社区开发者抱怨的最多一 条:很多C#的新特性无法使用。这是因为Mono 授权受限,导致Unity无法升级Mono。如果换做是IL2CPP, IL2CPP VM这套完全自己开发的组件,就解决了这个问题。
3.提高运行效率
根据官方的实验数据,换成IL2CPP以后,程序的运行效率有了1.5-2.0倍的提升。
il2cpp
PC平台脚本编译后端只能选择mono
iOS必须il2cpp
Android可选则mono或il2cpp
目前unity只有il2cpp模式的编译才支持64位系统,mono是不支持的。
苹果在2016年1月就要求所有新上架游戏必须支持64位架构,所以苹果平台打包必须要选il2cpp。