ILRunTime热更 个人见解
作者:互联网
unity分为两种打包模式,Mono和IL2CPP,Mono是一种JIT即时编译模式,IL2CPP则是咱们常见的直接编译成二进制的模式。
Mono模式打包后在Managed文件夹里面有各种dll的程序集(c#编译后会生成中间态也就是dll程序集),在游戏启动时,Mono虚拟机(CLR)在通过一些列操作后会再次对程序集进行编译成二进制文件运行,所以在Mono模式的热更就是直接更换dll程序集。
IL2CPP模式打包后在il2cppOutPut文件夹里面会把Unity下的程序集(Assembly-CSharp)转换成cpp文件,在启动游戏时直接通过c++编译器对cpp进行编译成二进制文件,这时更新dll程序集则没有效果,因为在这个模式下根本就不会用到dll程序集,所有ILRunTime就有用了。ILRunTime可以说是一种解释器,它不会对dll进行编译,但它可以通过反射对dll里面的il指令一句一句进行解释,所以在ILRunTime更新逻辑工程的dll会起到效果。整个游戏框架是这样的,首先要有两个工程,一个主框架工程,一个热更逻辑工程,这样会有两个dll。主框架工程包含了ILRunTime的所有代码,这个工程是不能进行更新的(因为IL2CPP),而咱们可以把热更逻辑工程当成一个资源更新,然后运行主工程时里面的ILRuntime起作用把热更逻辑工程dll的il指令通过自带的解释器一句一句运行(就是一个解释器,ILIntepreter.cs源码进行解释),从而实现热更。(热更只能更新逻辑工程)
标签:ILRunTime,个人见解,工程,Mono,程序,dll,IL2CPP 来源: https://www.cnblogs.com/lwj0419/p/16473441.html