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


索引
  • Deployment 轻量级资源部署管线
  • 使用 Deployment
  • 一、创建部署配置
  • 二、编辑部署配置
  • 三、正式开始资源部署
  • 步骤一:资源打包
  • 步骤二:资源版本构建
  • 步骤三:资源版本部署
  • 步骤四:资源版本更新
  • 四、资源下载的实时信息


Deployment 轻量级资源部署管线

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

使用 Deployment

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

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

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

一、创建部署配置

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

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

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

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

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

二、编辑部署配置

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

部署配置面板参数详解:

  • 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(打包输出路径随意,平台必须为当前游戏目标平台):

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

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

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

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

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

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

步骤二:资源版本构建

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

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

资源版本文件说明如下:

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

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

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

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

步骤三:资源版本部署

使用自己的方式将最新的资源版本(或者你想要前端使用的任意版本)拷贝到远端资源服务器上,放在部署配置时设置的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 为错误描述
                }
            }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

很显然,我们只需要调用一个入口方法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)。