Mono和IL2Cpp
一.导入
Unity的脚本资源是以dll文件的方式存在于磁盘上,在Unity中进行打包时,有两种打包方式选择:Mono和IL2CPP:
二.Mono和IL2CPP
1.指令集位数:Mono只支持打包为32位指令集(使用32位指令集的计算机内存最大只有4G);IL2CPP支持64位(兼容32位)。
2.打包后文件区别:Mono打包后文件中存在大量动态链接库文件(.dll后缀文件),也包括mono虚拟机文件(libmonobdwgc-2.0.so和libMonoPosixHelper.so),在运行程序时dll文件会加载到mono虚拟机中;IL2CPP打包后没有了dll文件,Unity主工程的dll文件(Assembly-CSharp.dll)和Mono虚拟机文件集成为IL2CPP虚拟机文件(libil2cpp.so)。
3.脚本编译流程:
1)Mono方式:在Unity编译打包时,使用C#书写的脚本会经过Mono的C#编译器打包为中间语言IL(Intermediate Language,IL语言所在的文件就是.dll后缀的文件),然后和其他dll文件一起在Mono虚拟机(Mono VM,Mono Virtual Machine)中运行。中间语言IL的存在主要是为了平台的兼容性,因为不同指令集平台执行同样的程序的具体机器语言并不是相同的,如果打包时直接将程序翻译为机器语言,那么打包后的程序包就只能在指定平台上运行,所以我们在打包时先将程序编译为中间语言IL,在不同的平台上使用Mono虚拟机将IL相应地翻译为该平台的机器语言执行。
2)CLR:Common Language Runtime,公共语言运行时;CLI:Common Language Infrastructure,公共语言基础结构;CIL:Comoon Intermediate Language,公共中间语言;CLI = CLR + CIL;Mono:基于CLR的开源项目,允许引擎和用户的托管代码运行在每一个目标平台上。
3)Mono虚拟机运行CIL的3种方式:
JIT:Just In Time,在编译时将C#编译为CIL,在运行时逐条读入逐条翻译为原生码交给CPU执行;
AOT:Ahead Of Time:在编译为CIL后,先将CIL预先编译为原生码,运行时直接交给CPU执行。AOT模式一般只处理部分CIL,剩余部分采用JIT模式运行;
Full AOT:使用AOT模式处理所有CIL。
4)IL2CPP方式:在Unity编译打包时,IL2CPP模式同样先将工程中的文件编译为IL,但是IL2CPP不会直接在虚拟机中运行这些IL,而是将工程IL和其他IL一起使用IL2CPP将这些IL变回CPP(C Plus Plus或C++)代码,然后再将C++代码放到本地编译器(具体运行的机器平台的编译器)上编译为能执行的原生汇编代码,再使用IL2CPP VM运行。
5)IL2CPP的编译方式:只支持AOT方式
6)平台支持:Android平台支持Mono和IL2CPP的所有编译方式,而IOS只支持Mono的Full AOT模式和IL2CPP 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2015-01-06 cocos2d-html5 onEnter init ctor构造函数 ----js特有特性(和c++有一点不一样)