【Unity】 HTFramework框架(五十四)【进阶篇】Deployment 轻量级资源部署管线

avatar
作者
筋斗云
阅读量:0

更新日期:2024年7月31日。
Github源码:[点我获取源码]

索引

Deployment 轻量级资源部署管线

Deployment为轻量级资源部署管线,整合资源打包、资源版本构建、资源版本更新为一体,快速实现资源部署和交付游戏。

使用 Deployment

Deployment为可选模块,将其添加到项目中(Assets/HTFrameworkDeployment)后,需同时结合HybridCLR代码热更新,以实现整体的资源热更新。

Deployment资源热更新可拆分为如下几个步骤:

1.[Editor] 资源打包(打AB包,编译热更程序集);
2.[Editor] 资源版本构建;
3.[Editor] 资源版本部署(部署至资源服务器);
4.[Runtime] 资源版本更新。

一、创建部署配置

在场景中使用如下快捷菜单创建部署配置DeploymentConfig

在这里插入图片描述

创建完成后如下(必须先引入框架主环境HTFramework):

在这里插入图片描述

DeploymentConfig在这里即代表了一个资源部署管线的总体配置,可以为不同的场景设置不同的配置,但理论情况下一个Project应当只存在一种资源部署策略。

二、编辑部署配置

在这里插入图片描述

部署配置面板参数详解:

  • 1.Download File Helper资源下载助手,在资源版本更新阶段,下载资源前做出自定义处理,比如远端资源服务器存在鉴权机制的话,在这里实现权限认证。
  • 2.Local Resource Path本地资源加载根路径,在资源版本更新阶段,从远端资源服务器下载资源时的存放路径,也会同步设置为AB包加载根路径(Main.m_Resource.SetAssetBundlePath),建议设置在Application.persistentDataPath路径之下。
  • 3.Build Resource Path资源版本构建根路径,顾名思义,用于存储我们构建的所有的资源版本,以资源版本号作为子文件夹区分。
  • 4.Remote Resource Path远端资源服务器根路径,一般为Web文件服务器、CDN服务器等,用于存放我们最新版本的资源,也可以是任意版本,前端运行时均会更新至该版本。
  • 5.Build New Deployment Version构建一个新的资源版本(绿色属性均为编辑器专有),以Version为当前版本号,需注意,如果当前版本为已存在的版本,则会被覆盖。

注意:每一个版本的资源,都包含能够使游戏运行的所有AB包资源和热更新程序集。

三、正式开始资源部署

步骤一:资源打包

对AB资源进行打包,比如使用AssetBundleBrowser(打包输出路径随意,平台必须为当前游戏目标平台):

在这里插入图片描述

热更新程序集进行编译,比如使用HybridCLR

在这里插入图片描述

需注意,所有热更新程序集名称、所有补充元数据程序集名称,必须添加到Main检视面板:

在这里插入图片描述

到这里,资源打包工作便完成了。

步骤二:资源版本构建

点击DeploymentConfig检视面板的按钮Build vxxx,构建一个新的资源版本,构建成功后,在Console点击资源版本的链接即可打开该版本文件夹:

在这里插入图片描述

资源版本文件说明如下:

在这里插入图片描述

资源版本构建程序会自动搜索AB包、热更程序集、补充元数据等,理论上不需要人为改动其中任何东西,特别是版本信息文件,因为其中会记录每个资源文件的校验码等信息,是作为资源版本更新时实现增量更新的关键。

当我们有新的资源版本被构建时,在这里是能够回顾所有构建版本的:

在这里插入图片描述

步骤三:资源版本部署

使用自己的方式将最新的资源版本(或者你想要前端使用的任意版本)拷贝到远端资源服务器上,放在部署配置时设置的Remote Resource Path路径下,切记不要直接拷贝版本号文件夹(比如v1.0.0),而是拷贝其中的所有文件

步骤四:资源版本更新

完成以上三个步骤,我们的资源版本已经完成了部署,接下来只需在游戏程序的运行时更新资源即可,尽量在执行任一业务逻辑代码之前。

不过,由于启用了HybridCLR后框架会首先进入静默状态,此时所有逻辑代码都还未执行,所以很方便完成资源更新:

			//进行资源版本更新             yield return DeploymentConfig.Current.UpdateResource((info) =>             {                 //更新中回调......                 //info 为资源下载信息,稍后讲解其中的参数             });  			UpdateResourceDownloadInfo info = DeploymentConfig.Current.DownloadInfo; 			//资源更新完成             if (info.IsDone)             {                 if (info.DownloadResult == UpdateResourceDownloadInfo.Result.Success)                 {                     //资源更新成功                 }                 else                 {                 	//资源更新出错,info.Error 为错误描述                 }             } 

很显然,我们只需要调用一个入口方法UpdateResource即可完成资源版本更新、HybridCLR补充元数据、HybridCLR热更新程序集加载等一系列热更流程。

且下载资源文件时,会比对校验码,只下载发生变化的资源文件。

不过需注意,在UpdateResource方法下载资源的过程中,只要出现一个资源下载失败,就会造成整体流程失败,需重新调用UpdateResource方法再次下载,不过请放心,上一次已下载的文件不会重复下载。

到此,确保资源更新成功后,会自动解除框架的静默状态,游戏程序会正确的进入生命周期,资源热更新流程结束。

四、资源下载的实时信息

我们可以通过监控资源下载的实时信息(UpdateResourceDownloadInfo),以完成一些自定义行为,比如显示下载进度、下载速度、下载耗时等。

资源下载的实时信息(UpdateResourceDownloadInfo)类详解:

  • 1.IsDone:整体资源热更新流程是否完成。
  • 2.DownloadResult:下载状态,以此判断资源热更新是否成功。
  • 3.Error:如果下载资源出错,此为错误信息。
  • 4.DownloadVersion:下载的资源版本号。
  • 5.TotalDownloadFileNumber:需要下载的文件数量。
  • 6.DownloadedFileNumber:已下载的文件数量。
  • 7.TotalDownloadFileSize:需要下载的文件总大小(单位:KB)。
  • 8.DownloadedFileSize:已下载的文件总大小(单位:KB)。
  • 9.DownloadedTime:已下载持续时长(单位:s)。
  • 10.DownloadedSpeed:实时下载速度(单位:KB/s)。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!