UE5 原生热更新实践笔记

本文详细介绍了如何在UE5.32引擎中进行原生热更,涉及资源划分策略、服务器部署架构、ChunkDownloader的使用以及构建和验证热更包的过程。作者分享了Uasset和非Uasset资源的处理方法,以及如何配置CDN和BuildManifest以确保热更的顺利进行。
摘要由CSDN通过智能技术生成

前言

引擎版本 UE 5.32源码

需求:原生UE热更流程

整体流程

  1. 资源划分
  2. 服务器部署和ChunkDownloader
  3. 基础包和热更包构建
  4. 下载验证

资源划分

将资源按规则进行划分,可以降低热更时的下载量。

Uasset资源

第一种是在ProjectSettings中进行配置
在这里插入图片描述
第二种是创建Primary Asset Labels
在这里插入图片描述
设置priority chunkID 等属性
在这里插入图片描述
可以在AssetAudit中查看划分结果
在这里插入图片描述
非Uasset资源
UE并没有提供 Non-Asset 划分 Chunk 的方式,但可以通过PakFileRules.ini 配置打包规则,实现把Lua脚本等非UAsset的资源打入指定Chunk包的需求,具体可以看我的另一篇文章

https://blog.csdn.net/weixin_38377747/article/details/137108126?spm=1001.2014.3001.5501

服务器部署和ChunkDownloader

热更包构架完毕后需要部署到服务器上,来测试下载。热更下载的方式本文采用chunkDownloader,官网文档中对于服务器部署和chunkdownloader的使用方式有详细介绍(有小坑,可以参考第二篇文章),这里不详细说明,只做一些细节提示。

https://dev.epicgames.com/documentation/en-us/unreal-engine/implementing-chunkdownloader-in-your-gameplay-in-unreal-engine
https://zhuanlan.zhihu.com/p/401132377

部署的文件夹结构为

  •  DeploymentName ----最外层,对应文档的PatchingDemoCDN(可理解为分支)
    
  •  	ContentBuildId ---- 其实就是版本号
    
  •  		Windows ----存放对应系统的pak包的文件夹
    
  •  			pakchunk0-Windows.pak ----若干对应版本的pak包
    
  •  		BuildManifest-PlatformName.txt ----描述文件,用来对比和下载Pak包
    

BuildManifest文件的内容很重要

NUM_ENTRIES 是pak包的个数,可以和基础包数量不一样

BUILD_ID是版本号 要跟上级文件夹一致

内容是pak包名称 pak包大小 版本号 _p计数 存放路径

需注意中间的空白不是空格 是Tab
在这里插入图片描述

配置 CDN Base Urls

在DefaultGam.ini中增加

[/Script/Plugins.ChunkDownloader ]

可以配置多条 不同的DeploymentName1对应不同的分支

[/Script/Plugins.ChunkDownloader <DeploymentName1>] 
+CdnBaseUrls=<BaseUrl1>
+CdnBaseUrls=<BaseUrl2>
  
[/Script/Plugins.ChunkDownloader <DeploymentName2>] 
+CdnBaseUrls=<BaseUrl3>
+CdnBaseUrls=<BaseUrl4>

ChunkDownloader

核心方法:

  • Downloader->Initialize(“Windows”, 8); 这一步拼接了BuildManifest-PlatformName中的PlatformName
  • Downloader->LoadCachedBuild(DeploymentName);尝试从本地加载对应pak包,可以用来判断是否需要下载
  • Downloader->UpdateBuild(DeploymentName, ContentBuildId, CallbackFunction);开始进行下载
  • Downloader->BeginLoadingMode(LoadingModeCompleteCallback);监听下载过程
  • Downloader->MountChunks(DownloadedChunks, MountCompleteCallback);挂载Pak,需要传入ChunkId数组

下载后的文件默认存放在Saved\PersistentDownloadDir\PakCache下,其中还有一个CachedBuildManifest描述文件,上面的LoadCachedBuild方法就是尝试读取这个文件。

基础包和热更包构建

使用projectlaunncher进行打包

新建一个LaunchProfiles,Cook选择By the book,勾选要cook的平台和语言

重点设置在Relase/DLC/Patching Settings和 Advanced Settings中

基础包
在这里插入图片描述
热更包
在这里插入图片描述
其他设置这样就可以
在这里插入图片描述
这样打包完后在项目文件夹下会生产Releases文件夹,其中有对应你版本号的文件夹
在这里插入图片描述
打出来的pakchunk包都在基础文件夹中(这一点有些奇怪,我觉得对应版本的pak包应该在对应版本文件夹,不知道是哪里出了问题)

在这里插入图片描述
把其中热更的pak包复制到服务器对应版本的文件夹下,再配置好BuildManifest的内容,热更的准备工作就结束了。

下载验证

如果客户端热更失败,重点排查一下几点:

  • 服务器部署的文件结构,BuildManifest的内容 版本号是否正确
  • 部署的URL能否正常访问
  • CDN Base Urls配置是否正确

顺利的话热更后我们会在打包后的项目 Saved\PersistentDownloadDir\PakCache下看到这些文件
在这里插入图片描述
官方流程中在下载完成后通过Downloader->MountChunks来进行了Pak的挂载。

因为引擎默认的挂载Pak包路径是这三个

  • Contnet/Paks
  • Engine/Content/Paks
  • Saved/Paks

所以如果不走这个流程的话,热更的pak包是不会挂载的。如果想自动挂载的话,除了复制到Contnet/Paks下还可以使用-pakdir=的命令行来增加挂载目录(只能在非shipping模式下使用)
在这里插入图片描述
到这里一个简单的原生UE热更新流程就完成了,其中还有很多值得优化的地方,比如自动化生产BuildManifest的工具等。

UE持续学习中,欢迎大佬指正错误之处。
个人实践记录,未经同意谢绝转载谢谢!

参考

https://zhuanlan.zhihu.com/p/401132377
https://zhuanlan.zhihu.com/p/523509674
https://dev.epicgames.com/documentation/en-us/unreal-engine/implementing-chunkdownloader-in-your-gameplay-in-unreal-engine
https://blog.csdn.net/acdfg123/article/details/128024036
https://blog.csdn.net/xiao__sha/article/details/127089373

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值