当前位置: 首页 > news >正文

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

更新日期: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)。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • VUE框架面试整理-Vuex
  • 将一批 csv 的第一行抄进 Excel
  • C++——智能指针
  • springboot山东外事职业大学校园食堂点餐系统-计算机毕业设计源码10417
  • 前端常用的性能优化方案
  • Pandas行列变换指南:数据重塑的艺术
  • LeetCode刷题笔记 | 3 | 无重复字符的最长子串 | 双指针 | 滑动窗口 | 2025兴业银行秋招笔试题 | 哈希集合
  • 连接未来:幂简集成引领API新时代
  • 大数据技术原理-Hadoop的安装
  • c++ 初始值设定项列表(initializer_list)
  • 大模型日报 2024-08-03
  • 解决电脑缺少.NET组件?手把手教你轻松解决
  • Go语言实现多协程文件下载器
  • 【Java 第六篇章】泛型
  • 聚鼎科技:装饰画怎么做盈利更快
  • android 一些 utils
  • Bootstrap JS插件Alert源码分析
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java知识点总结(JavaIO-打印流)
  • passportjs 源码分析
  • Shell编程
  • 面试遇到的一些题
  • 删除表内多余的重复数据
  • 使用docker-compose进行多节点部署
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 赢得Docker挑战最佳实践
  • 最近的计划
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # Java NIO(一)FileChannel
  • #数据结构 笔记三
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (4)(4.6) Triducer
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (JS基础)String 类型
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (转)平衡树
  • .ai域名是什么后缀?
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET 中 GetProcess 相关方法的性能
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET分布式缓存Memcached从入门到实战
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .pop ----remove 删除
  • [ 数据结构 - C++] AVL树原理及实现
  • [000-01-022].第06节:RabbitMQ中的交换机介绍