初识IL2CPP

Unity中的Mono和IL2CPP是两种脚本后处理方式,用于实现跨平台。Mono包括C#编辑器、CLI虚拟机和核心类别程序库,其跨平台依赖于JIT和AOT编译。iOS平台仅支持Full-AOT。IL2CPP则是通过AOT编译器将IL转换为C++,然后编译成原生代码。Android支持两者,但iOS仅支持Mono的Full-AOT和IL2CPP。
摘要由CSDN通过智能技术生成

在Unity中进行打包时,有两种打包方式选择:MonoIL2CPP

Mono和IL2Cpp是Unity的脚本后处理方式,通过脚本后处理实现Unity的跨平台


1.Mono


(1). Mono组成组件:

C#编辑器,CLI虚拟机,以及核心类别程序库

(2).跨平台过程

Mono通过C#编辑器把脚本打包成中间语言(IL)IL所在的文件就是.dll后缀的文件,
然后和其他dll文件一起在Mono虚拟机(MonoVM)中运行
在不同的平台上MonoVM将IL翻译成不同的平台语言

(3).MonoVM运行IL的3中方式:

1.JIT(just in time): 即时编译

程序运行过程中将ILbyte code(字节码)转译为目标平台的原生码
即生成新的代码又运行新代码,其实就是将对应的机器码映射到内存空间中,此时就需要对内存空间的读写权限

而ios封了内存的可执行权限,所以ios不能使用JIT的方式

2.AOT(Ahead of time):提前编译

程序运行前将.exe/.dll文件中的IL的byte code(字节码)部分转译为目标平台的原生码并且储存起来 程序运行过程中仍有一部分代码通过JIT即时编译

3.Full-AOT(Full ahead of time):完全静态编译

程序运行前,将所有源码编译成目标平台的原生码

其中:android 使用JIT的方式 IOS只支持Full-AOT的方式

图解:

2.IL2Cpp

(1).IL2Cpp的组成部分:

AOT编译器(il2cpp.exe),运行时库

AOT编译器:把IL转换成CPP文件
运行时库:GC等

(2).跨平台过程:

IL2Cpp通过AOT编辑器,把IL语言转换成c++语言,然后通过运行机器平台的编译器 编译成对应平台能执行的原生汇编代码,再使用IL2Cpp VM 运行

图解:

 平台支持:Android平台支持Mono和IL2CPP的所有编译方式,而IOS只支持Mono的Full AOT模式和IL2CPP 。

如果有不对的地方希望能指出来 感激不尽。
另外,不熟悉的代码一定要写一下加深记忆 只用看的记不了太久。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一梭键盘任平生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值