Unity学习笔记-热更新相关

前言

一直都很疑惑,为什么Unity不能直接热更,非要绕来绕去的用lua或者是IlRuntime弄这些虚拟机,一直到Hybird出现,我又很纳闷为什么HyBird就可以,所以详细了解了一番

解释

首先应该了解的是代码是怎么跑到机器上工作的,我们都知道计算机它是只能读懂0和1的,但我们不可能用01编写这些代码,于是出现了各种各样的语言辅助我们工作。

那么大致可以了解的是工作部分总体可以分成两个部分:编译时和运行时

编译时很好理解就是我们编写代码的过程,但是这个过程多种多样,毕竟平台更新换代比较快,各种API也层出不穷,一不注意就过时了,这个部分主要是为了解决系统软件性的差异的,当然这个过程也可以交给运行时来做,不过这样的话工作量可就太大了不怎么现实

那么运行时呢,我们的代码被转换成机器码,这个机器码跑在内存上的时候就是机器工作的时候,机器码的指令一般来说就那么多,在这个过程中是解决CPU硬件差异的

然后我们还需要了解的是Unity是如何跨平台的,Unity使用的是C#,C#本身是没有跨平台的能力的,它只能在windows平台上跑,想要跨平台他需要别人的辅助,也就是Mono和IL2cpp,Mono基本已经快被Unity放弃了,没有版权不说效率也没有IL2cpp高,

Mono是基于Just in time的,c#语言被编译成CIL,然后在跑在Mono上,Mono是有自己的运行时的,然后通过运行时的帮助跑到机器上

IL2cpp时基于Ahead of time的,由于IOS平台的限制不支持JIT,所以只能采用AOT的方式,C#语言被编译成IL之后然后跑在IL2cpp平台上,然后转换成cpp语言,借助cpp语言的优势,效率自然也更高,同时自己的VM也在辅助工作

LUA:Lua是使用C编写的脚本语言,它在运行时读入Lua编写的代码,在解释Lua字节码(Lua自己的指令)时不是翻译为机器码,而是使用C代码进行解释,不用开辟特殊的内存空间,也不会有新代码在执行,执行的是Lua的虚拟机,用C写出来的虚拟机,

ILRuntime

 HuaTuo:

HybridCLR扩充了il2cpp运行时,将它由AOT运行时改造为'AOT + interpreter'双引擎的混合运行时,进而完美支持在iOS这种禁止JIT的平台上以解释模式无缝地运行动态加载的dll。如下图所示:

猜你喜欢

转载自blog.csdn.net/qq_55042292/article/details/125890156
今日推荐