U3DFrameWorkDemo:四资源打包和热更
Posted 寡人正在Coding
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了U3DFrameWorkDemo:四资源打包和热更相关的知识,希望对你有一定的参考价值。
代码参考
代码文件参考下述详解的类图,工程参考第零章工程说明
概述
热更新方便用户更新,增加用户的留存量。它依赖打包生成的版本文件。
思路
打包
- 考虑分包策略,包体太大加载速度慢且可能有无效的内存冗余,包体太小可能会频繁加载AB造成效率下降。核心思想是把用到的东西放在一起,通用的资源分类打包。
- 标记哪些资源被分配到哪个包里,最好做一个编辑器用于分包。如果对粒度要求不高的话,可以考虑使用文件夹来划分包体,它天然具有文件的分类属性和路径作为Key的唯一性
- 有些文件U3D是不认识的,在打包时需要转换成U3D认识的文件,如Lua、Json可以转换成Txt文本文件。
- 需要建立资源路径到到包体名的映射,可以在打包时生成映射文件,在使用文件夹分包时,因为文件夹时树形结构,则可以使用搜索树根据资源路径来查找包名,从而省去映射文件的开销
- 对每个资源生成版本标识,可以使用MD5。同时也需要对包的版本号进行维护,方便热更时比对版本号。
- 每次打包要更新Manifest文件,Manifest文件包含了依赖包清单和资产清单
- 把更新包打压缩包方便传输
热更
- 比对版本号,建立下载队列
- 使用断点续传来减少用户下载中断的损失
- 更新版本号
- 更新后可能更新了已加载的脚本,需要重新初始化这些脚本
实现
打包与热更
打包
- BundleSchemaWnd:分包编辑器,生成分包信息
- PublishWnd:基础包打包编辑器界面
- UpdateWnd:更新包打包编辑器,显示差异资源
- BuildScript:基础包打包脚本
- UpdateBuildScript:更新包打包脚本,打包后会把更新文件打Zip包
- BundleBuilder:收集和检查打包信息,调用引擎API打包,生成资源MD5标识
- BuildUtil:打包相关工具方法
- BuildConst:打包相关路径等配置
- VersionUtil:维护版本文件相关工具方法
热更新
- HotUpdateMgr:热更管理,检查生成下载队列调用下载器下载(下载任务生产者),处理外部监听委托
- UpdateTask:下载任务,包含版本、资源包url、保存路径等等
- Downloader:下载器,具体处理下载任务(下载任务消费者)
- DownloadBreakResumeHandle:派生自DownloadHandlerScript,处理断点续传
打包流程
基础包
- 初始化打包上下文,传入要打包的目录等参数
更新包
- 收集差异文件进而收集差异目录
- 打包成功后把更新的资源打成zip包
打包流程
- U3D不认识的资源转换和恢复
- 依据目录检出资产并生成打包信息
- 打包完成更新MD5文件
更新流程
- 比对本地与远程的版本差异,生成版本下载队列
- 下载队列依次下载更新包解压
- 更新完成热重启
备注
- 图集、shader变体U3D有做特殊打包机制需要一些配置文件,参考
- Uniy SBP(Scriptable Build Pipeline) 在大型项目应该会比较实用(多线程多机器构建),其特性是粒度更细的多任务构建、内容定制、profier,以及使用缓存加速多次构建。参考:
- Unity有个插件Addressables可以快速建构打包和热更模块,有些地方需要开发者自己拓展,尤其是本地静态资源无法增量打包,需要把远程动态资源也打到基础包里,另外,Addressables的代码暴露也相当奇怪,某些关键节点是Internal的,无法使用,拓展时有时需要派生自一些低级的类。参考:
Unity3D开发之手游热更,基于GameFramework(GF),涵盖Android|IOS|资源包|打包等功能非专业团队勿扰
最近公司团队需要一个热更功能
没想到自己3天就做出来了,当然作者有多年Unity手游lua热更经验
由于公司希望是C#的热更,所以保守采用了ILRuntime(似乎也可以用最新的il2cpp热更)
虽然说核心并非c#语言,更多应该是资源的热更,但研发3天完成,是不是有点太儿戏
举个例子:你去健身房,3天减20斤可否
可以的:把你身上的肉切下来就可以了
同理:站在巨人的肩膀上,才能看的更远,走的更高
所以:我们使用了大神的GameFramework,2019年发布到GIThub,当年2019比较火
一般框架得通病
我有多反感这种框架就不在这里展开说了,一般这种框架为了通用性,就放弃了实用性,更不用想个人团队定制化;一般这种框架说自己有多强,就有多难配置和初始化,甚至使用过程一堆天坑等着你
我们缺的是一个小目标么?我们缺的是王健林爸爸的那一个亿
来看看,哥做了哪些修复,才让GF框架变得稍微能使用:
热更的需求,无非就是打包成AB资源包,使得手机端匹配手机端资源,PC端匹配PC端资源
再深层次得需求,资源包含DataList,可做Mapping表
资源包含脚本,可注入,我们还是使用ILRuntime
(可参照下面的HybirdCLR,但是很多坑)
直接生成整体包和Version文件(官方觉得这属于自定义,非框架本身,但却是我们的痛点)
已使用phpStudy_pro测试
(只需要启动ngix 服务)
这不是一个框架,更不是一个方案,(这一个)完整的能直接接入的代码,公司在用,总共也就研究了3天,轻松接入单机,带各种小工具,修复了10+个BUG,需要的电邮联系,
sidney9111 at gmail dot com
非团队勿扰
扩展阅读:
Unity GameFramework-打包和热更新模块(Resources资源)_东方天滨的博客-CSDN博客_unity打包热更新
GameFramework_HybridCLR——Window打包、热更_谢谢希望的博客-CSDN博客
以上是关于U3DFrameWorkDemo:四资源打包和热更的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D开发之手游热更,基于GameFramework(GF),涵盖Android|IOS|资源包|打包等功能非专业团队勿扰
Unity3D开发之手游热更,基于GameFramework(GF),涵盖Android|IOS|资源包|打包等功能非专业团队勿扰
游戏开发探究Unity Addressables资源管理方式用起来太爽了,资源打包加载热更变得如此轻松(Addressable Asset System | 简称AA)
游戏开发探究Unity Addressables资源管理方式用起来太爽了,资源打包加载热更变得如此轻松(Addressable Asset System | 简称AA)
游戏开发探究Unity Addressables资源管理方式用起来太爽了,资源打包加载热更变得如此轻松(Addressable Asset System | 简称AA)