# 一、什么样的代码支持热更新

# 模式一:加载所有代码指令到内存

将所有的代码指令先加载到内存 – 代码段,然后执行. C++ 开发的程序 -> 代码指令 -> 内存 Unity C# 开发程序 -> 一跑起来所有的 C# 都加在到内存里,所以没有动态的改变,不支持热更新,重新安装替换所有的代码,才可以更新

# 模式二:将所有的核心代码先加载到内存

核心代码加载到了内存里,程序可以跑起来了,然后运行代码先加载代码到内存里,然后再执行,动态加载执行,即热更新 跑起来以后,可以去最新的位置 (比如服务器) 下载代码,然后装载代码。不用重新安装 App 启动的核心代码是无法被热更的。能热更的是动态加载的这部分

# 原理图

# 选择热更方案

# Lua

为什么选择 Lua 做热更.

因为 Lua 在游戏客户端开发使用的很广泛,比如魔兽世界
同时 Lua 解释执行接近于 Native性能 (与系统调用无关的部分)

# xLua

xLua 是 Lua 在.Net 环境下的解决方案
包含: * C# 环境下的 Lua 代码解释器(Lua 虚拟机) * Unity 的接口做好了,方便 Lua 开发调用 * 可以把部分的 C# 代码,使用 Lua 修正 地址:
https://github.com/Tencent/xLua 开发原则 1. 我们游戏场景里面不放任何物体,方便维护,避免冲突.(保证场景是空的) 1.1. 当场景节点多的时候,一个月以后,你可能就不记得场景的结构关系了 2. 场景只是作为一个运行时的容器,所有的物体通过代码 new 出来.(代码是知道的) 3. 所以运行的时候只有一个场景,不会有场景的切换。同时游戏的角色,特效,粒子,地图,一个个资源都是预制体,给代码使用.-> 美术就可以单独做 (美术与程序分离) 4. 不手动的往节点 (预制体) 上挂代码。角色模型 ->prefab (不挂代码), 保证维护代码方便 (这样可以保证调试方便,而不是因为挂载脚本而逻辑不清楚,可以直接通过代码来找那个物体挂了那些代码) 5. 纯 AssetBundle 来做资源管理,代替 Resources. 5.1. 方便更新:更新代码 (Lua 代码打成一个特殊的 AB 包)+ 更新资源 (AssetBundle) 5.2. 方便打空包:打包时必须打入的包:(场景 + 场景以来的资源)、(Resources 文件夹下的所有资源都必须打入安装包). 6. 制定一个纯 Lua 的组件化开发框架 —> 方便编写业务逻辑,以及逻辑计算。减少 Lua 调用 C# 的调用次数 7. 调试模式,调试模式加载 Lua 代码,加载我们的资源 ->AssetsDatabase 来加载资源 (只能在 Editor 模式下使用). 即分成两种模式。第二种模式是发布模式: Lua-> 脚本代码 ab 包,资源 ab 包,更新,加载 同样 C# 的套逻辑可以在 Lua 中复现

更新于

请我喝[茶]~( ̄▽ ̄)~*

Solvarg 微信支付

微信支付

Solvarg 支付宝

支付宝

Solvarg 贝宝

贝宝