Unity热更新相关概念

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity热更新相关概念相关的知识,希望对你有一定的参考价值。

热更新实现方式

1. 使用Lua脚本编写游戏逻辑(Lua调用C#的方式),Lua解析器(也叫Lua虚拟机)在运行时解析Lua脚本,无须编译
2. C#反射技术
3. C#Light(什么鬼?) 

如何学习热更新

1. 学习Lua编程
 
   关于uLua的学习,我们可以参考官网,以及官方bbs来学习。上面有详细的视频文字教程
 官网:http://www.ulua.org/index.html
 官方bbs:http://bbs.ulua.org/
 
2. 使用LuaInterface、Luanet进行Lua和C#交互
3. 学习使用AssetBundle进行资源更新
4. 学习Lua热更新框架(SimpleFramework等)

热更新流程

步骤1. 将StreamingAsset目录下的文件,全部复制到目标平台(ios/android)的数据目录中(第一次运行游戏时)
步骤2. 启动游戏前刷新所有文件夹,客户端文件(csv文件)与服务上的文件(file.txt)对比MD5,记录不同的文件,下载对应的文件替换,启动场景
步骤3. 从数据目录加载AB(使用协程不使用线程)
步骤5. 加载(和下载)AB的思路:
    (1)建立一个队列,队列中有加载AB的请求时,去加载,加载完成后移出队列,加载下一个直到完成
    (2)Unity5.0之后的AB资源是分开的,加载时难以判断依赖关系,而且AB资源在内存中只能有一个,所以使用单线程加载
步骤6. 实例化后卸载内存中的AB

uLuaFramework框架结构图

注意的点

(1)打包时根据每个文件起对应的AB名字,记录下MD5值和大小,保存为CSV文件(微软的东西确实好),好处是便于看也便于改
(2)由于StreamingAsset目录是只读的,不能将服务端下载的文件放到里面,创建数据目录
(3)开发用Resource加载,发布用LoadAB加载
(4)不同平台下数据目录地址不同:
Android、IOS:Application.persistentDataPath + "LuaFramework"
Mac OS、Windows:c:/LuaFramework/
Editor:Application.dataPath + "/StreamingAsset/"

以上是关于Unity热更新相关概念的主要内容,如果未能解决你的问题,请参考以下文章

Unity热更新概念

为啥Unity没有实现iOS平台代码热更新?

Unity 之 Addressable可寻址系统 -- 资源热更新

Unity 之 Addressable可寻址系统 -- 资源热更新 -- 进阶

Unity上面有啥好的热更新方案

Unity上面有啥好的热更新方案