首页 > 其他分享 >U3DFrameWorkDemo:四、资源打包和热更

U3DFrameWorkDemo:四、资源打包和热更

时间:2023-05-29 11:45:09浏览次数:59  
标签:文件 更新包 打包 更新 资源 下载 U3DFrameWorkDemo

代码参考

代码文件参考下述详解的类图,工程参考第零章工程说明

概述

热更新方便用户更新,增加用户的留存量。它依赖打包生成的版本文件。

思路

打包

  • 考虑分包策略,包体太大加载速度慢且可能有无效的内存冗余,包体太小可能会频繁加载AB造成效率下降。核心思想是把用到的东西放在一起,通用的资源分类打包。
  • 标记哪些资源被分配到哪个包里,最好做一个编辑器用于分包。如果对粒度要求不高的话,可以考虑使用文件夹来划分包体,它天然具有文件的分类属性和路径作为Key的唯一性
  • 有些文件U3D是不认识的,在打包时需要转换成U3D认识的文件,如Lua、Json可以转换成Txt文本文件。
  • 需要建立资源路径到到包体名的映射,可以在打包时生成映射文件,在使用文件夹分包时,因为文件夹时树形结构,则可以使用搜索树根据资源路径来查找包名,从而省去映射文件的开销
  • 对每个资源生成版本标识,可以使用MD5。同时也需要对包的版本号进行维护,方便热更时比对版本号。
  • 每次打包要更新Manifest文件,Manifest文件包含了依赖包清单和资产清单
  • 把更新包打压缩包方便传输

热更

  • 比对版本号,建立下载队列
  • 使用断点续传来减少用户下载中断的损失
  • 更新版本号
  • 更新后可能更新了已加载的脚本,需要重新初始化这些脚本

实现

打包与热更

image

打包

  • BundleSchemaWnd:分包编辑器,生成分包信息
  • PublishWnd:基础包打包编辑器界面
  • UpdateWnd:更新包打包编辑器,显示差异资源
  • BuildScript:基础包打包脚本
  • UpdateBuildScript:更新包打包脚本,打包后会把更新文件打Zip包
  • BundleBuilder:收集和检查打包信息,调用引擎API打包,生成资源MD5标识
  • BuildUtil:打包相关工具方法
  • BuildConst:打包相关路径等配置
  • VersionUtil:维护版本文件相关工具方法

热更新

  • HotUpdateMgr:热更管理,检查生成下载队列调用下载器下载(下载任务生产者),处理外部监听委托
  • UpdateTask:下载任务,包含版本、资源包url、保存路径等等
  • Downloader:下载器,具体处理下载任务(下载任务消费者)
  • DownloadBreakResumeHandle:派生自DownloadHandlerScript,处理断点续传

打包流程

image

基础包

  • 初始化打包上下文,传入要打包的目录等参数

更新包

  • 收集差异文件进而收集差异目录
  • 打包成功后把更新的资源打成zip包

打包流程

  • U3D不认识的资源转换和恢复
  • 依据目录检出资产并生成打包信息
  • 打包完成更新MD5文件

更新流程

image

  • 比对本地与远程的版本差异,生成版本下载队列
  • 下载队列依次下载更新包解压
  • 更新完成热重启

备注

  • 图集、shader变体U3D有做特殊打包机制需要一些配置文件,参考
  • Uniy SBP(Scriptable Build Pipeline) 在大型项目应该会比较实用(多线程多机器构建),其特性是粒度更细的多任务构建、内容定制、profier,以及使用缓存加速多次构建。参考:
  • Unity有个插件Addressables可以快速建构打包和热更模块,有些地方需要开发者自己拓展,尤其是本地静态资源无法增量打包,需要把远程动态资源也打到基础包里,另外,Addressables的代码暴露也相当奇怪,某些关键节点是Internal的,无法使用,拓展时有时需要派生自一些低级的类。参考:

标签:文件,更新包,打包,更新,资源,下载,U3DFrameWorkDemo
From: https://www.cnblogs.com/hggzhang/p/17087263.html

相关文章

  • 500行代码手写docker-实现硬件资源限制cgroups
    (5)500行代码手写docker-实现硬件资源限制cgroups本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。本章的源码已经上传到github,地址如......
  • 找到占用程序【资源监视器】
    很多时候,由于问题导致文件一直处于占用无法操作,如何快速找到占用程序呢?任务管理器》性能》资源监视器,搜索句柄即可win11为例 ......
  • U3DFrameWorkDemo:二、资源管理
    代码参考代码文件参考下述详解的类图,工程参考第零章工程说明概述在游戏项目中有很多资产如:预制体,图片,音频,Lua脚本,Shader等等。他们随打包放在用户的硬盘里。在游戏的运行过程中,需要对这些资产加载和卸载,资源管理模块负责做这些事情。思路U3D会托管资产,也就是说资产一旦被加......
  • U3DFrameWorkDemo:零、工程说明
    序言前段时间拾起U3D时,重新看了一下之前的学习资料,整理成了一个demo。主要包含框架基本模块核心功能实现。当然,这个小demo是我个人的学习和探索,如demo的中文解释,它是一个“原型”--既是它的优点,也是它的缺点。它并不是一个完整的框架,但包含其核心功能模块的实现思路,简单直接(应用......
  • U3DFrameWorkDemo:一、生命周期管理
    代码参考见工程MgrBase、GameManager等代码文件,工程参考第零章工程说明概述在游戏的项目中,有一些APP中阶段的转换节点,如:进入App,登录,切地图等。通常有一些模块只在某个阶段被使用,比如:在玩家登录后启动玩家资产管理模块,玩家切地图清理(或刷新)地图资源管理模块等等。还要注意的是这......
  • C#中使用using进行资源管理的的类型有哪些?
    在C#中,实现IDisposable接口的类型可以使用using语句进行资源管理,具体如下:1. System.IO.Stream:表示字节流的抽象类。它是所有文件I/O操作的基类,包括文件读取和写入。using(Streamstream=newFileStream("file.txt",FileMode.Open)){//使用stream对象进行文件读取操......
  • 6.6.4 PCS创建Oracle 资源及资源组
    在RHCS体系中,Oracle的启动是按以下顺序进行的:VIP。监听器。逻辑卷(ISCSI共享出来的)。文件系统(在逻辑卷上创建)。数据库实例。上边这些资源,在PCS里创建好以后,将其组合成一个单独的资源组,形成一个不可分割的整体。1)PCS添加Oracle监听器资源Oracle的VIP资源在前边已经添加,那么接下来就......
  • IDEA中创建java多模块项目和打包
    文章来源:https://www.jb51.net/article/210892.htm#_label7   非常感谢。一、使用springinitializr创建java工程1、启动IDEA,新建java工程,使用向导创建一个springboot框架的工程 2.设置项目信息,java版本选择8 3、勾选项目需要用到的依赖 4、设置项目名称,点击......
  • 2023.21 linux下的文件打包tar
    “tar”是“tapearchive”的缩写,最初是为了在磁带上创建档案而设计的,Linux下常使用tar命令将多个文件或目录打包成一个文件,这样可以方便地将多个文件或目录打包成一个文件,以便于备份或传输。刚从Windows使用Linux的很多可能都没意识到打包和压缩两个不同的概念,打包就是将多......
  • LabVIEW|小技巧:While循环结构加上时间延时可降低CPU资源利用率
    笔者在用LabVIEW编程的时候,用到while循环结构时,除了添加必要的停止标志外,经常忘记加上一个时间延时,这种做法不可取,While死循环会大量消耗CPU,一般5个While死循环就足以占用接近百分百的CPU。这是一个的情况:多加几个,CPU利用率激增,程序可能崩了:查看计数i的值,变化非常快:加上1ms的延时后......