前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是 热更新 常问问题总结,有帮助的可以收藏。
1. 热更新的原理
1.1 为什么使用Lua作为热更新语言,不用C#
热更新本身对于资源热更新是非常容易的,Unity自带的AB包就可以轻松解决,难的是代码热更新,因为Unity中的C#是编译型语言,Unity在打包后,会将C#编译成一种中间代码,再由Mono虚拟机编译成汇编代码供各个平台执行,它打包以后就变成了二进制了,会跟着程序同时启动,就无法进行任何修改了。
LUA是解释型语言,并不需要事先编译成块,而是运行时动态解释执行的。这样LUA就和普通的游戏资源如图片,文本没有区别,因此可以在运行时直接从WEB服务器上下载到持久化目录并被其它LUA文件调用。
1.2 不用C#热更的原因
准确的说,C#在安卓上可以实现热更新,但在苹果上却不能。
那C#为什么不做成解释型语言呢?因为C#的定位是一个追求效率且功能强大的编译型语言。在安卓上可以通过C#的语言特性-反射机制实现动态代码加载从而实现热更新。
具体做法是:将需要频繁更改的逻辑部分独立出来做成DLL,在主模块调用这些DLL,主模块代码是不修改的,只有作为业务(逻辑)模块的DLL部分需要修改。游戏运行时通过反射机制加载这些DLL就实现了热更新。
但苹果对反射机制有限制,不能实现这样的热更。为什么限制反射机制?安全起见,不能给程序太强的能力,因为反射机制实在太过强大,会给系统带来安全隐患。
扩展:
ILRuntime(C#热更新:
lLRuntime项目为基于C#的平台(例如Unity)提供了一个纯以实现,快速、防便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新。
编译原理:它把代码分为两个dll文件,启动的时候只启动一个,另一个dll通过反射启动,在没启动第二个热更的dll,将第一个dll文件替换掉。来达到一个热更的效果。
2. 热更新的流程
2.1 导出热更流程
- 打包热更资源的对应的md5信息(涉及到增量打包)
- 上传热更 ab 到热更服务器</

这篇博客详细介绍了Unity游戏开发中的热更新原理和流程,包括为何使用Lua而非C#,热更新流程,资源打包与依赖管理,AssetBundle的使用,以及热更新在手游中的必要性和版本管理策略。
https://www.cnblogs.com/murongxiaopifu/p/4278947.html
最低0.47元/天 解锁文章
7276

被折叠的 条评论
为什么被折叠?



