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源码进行解释),从而实现热更。(热更只能更新逻辑工程)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!