更新日期:2024年7月31日。
Github源码:[点我获取源码]
索引
- Deployment 轻量级资源部署管线
- 使用 Deployment
- 一、创建部署配置
- 二、编辑部署配置
- 三、正式开始资源部署
- 步骤一:资源打包
- 步骤二:资源版本构建
- 步骤三:资源版本部署
- 步骤四:资源版本更新
- 四、资源下载的实时信息
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)。