虚幻引擎应用实例分享(四):如何分块打包

作者:Dluck
2023-05-19
0 0 0

前言

由 Epic Games 推出的虚幻系列引擎,因其高效、全能、易获取、所见即所得等特性受到广大游戏开发者的欢迎,市面上也不乏从入门到深度分析的教程。本系列主要面向虚幻引擎的初学者以及有一定实践经验的虚幻引擎游戏开发者,分享能够立即运用在自己项目中的实践技巧。本教程综合了个人的学习笔记、官方文档以及个人心得,水平不足之处,望读者反馈和指正。

本文是 UE 应用实例分享系列专栏的第四篇。

正文

UE 支持将游戏的 Assets 分开打包进不同文件块(Chunk)。UE 的 Assets 管理系统中能够将 Chunk 识别为带有数字 ID 的 Assets 包。在完成资源烘培(Cook)后,会将每个 Chunk 对应生成一个能够方便地进行内容分发的 .pak 后缀文件。通过 Chunk 分包可以实现游戏热更新,让游戏只下载部分便可游玩,或者动态更新 DLC 内容。

开启 Pak 打包需要在 Project Setting > Project > Packaging 中开启 Use Pak File 及 Generate Chunks。

如何设置 Chunk 包含哪些资源:

  • 在 Project Setting > Game > Asset Manager 中配置。
  • 在 XxxGame.ini 中指定配置。
  • 使用 PrimaryAssetLabel 来根据文件夹管理资源分包。

配置完成后,打包完成 Pak 文件生成路径为: Saved/StagedBuilds/[PlatformName]/[ProjectName]/Content/Paks

Pak 文件名称格式为 pakchunk<ChunkId>-<Platform>.pak

开启分包配置

UE 5.1 的 Packaging 设置界面

UE 的资源打包选项位于 Project Settings - Packaging

  • UsePakFile:选中就可以打包 Pak 文件,不选资源会按照项目路径单独存放。
  • Generate Chunks:勾选可以开启 Chunk 打包,每个 Chunk 都会生成一个 Pak 文件。
  • Generate No Chunks:不生成 Chunk。
  • Chunk Hard Reference Only:只把 Hard 引用的资源打包到 Chunk 中,Soft 的引用不会进包。
  • PakFile Compression Formats:指定 Pak 的压缩算法,该参数会传递给 UnrealPak。

如何划分 Chunk

使用 Asset Manager 分包

Asset Manager 位于 Project Settings > Game > Asset Manager,可用于手动指定 PrimaryAsset 类型以及它们的 Chunk ID 和 Priority。

[/Script/Engine.AssetManagerSettings]
+PrimaryAssetRules=(PrimaryAssetId="Map:/Game/Maps/Sanctuary",Rules=(Priority=-1,ChunkId=1,CookRule=Unknown))
+PrimaryAssetRules=(PrimaryAssetId="Map:/Game/Maps/Highrise",Rules=(Prority=-1,ChunkId=2,CookRule=Unknown))
+PrimaryAssetRules=(PrimaryAssetId="Map:/Game/Maps/ShooterEntry",Rules=(Priority=-1,ChunkId=0,CookRule=AlwaysCook))


使用 PrimaryAssetLabel 分包

PrimaryAssetLabel 是类型为 DataAsset 的资产,在项目文件夹中创建 DataAsset 并继承 PrimaryAssetLabel 类型即可创建,双击打开即可调整参数来控制分包生成。

参数

  • Priority 指定当前 Chunk 优先级。多个 Chunk 包含相同资源时,会被打包进优先级最高的 Chunk 中。如果相同,会都存储一份。
  • ChunkID 指定当前 Chunk 的 ID。
  • ApplyRecursively 对当前 Chunk 管理的资源进行递归依赖分析。
  • CookRule 控制当前 Chunk 管理的资源是否要烘焙(Cook)。Unknown 则是有引用才 Cook。
  • Lable Assets in My Directory 最主要的功能,让当前 PrimaryAssetLabel 下目录中的所有资源都纳入自身管理。
  • IsRuntimeLabel 决定 PrimaryAssetLabel 自身会不会被打进包内,因为其自身是用于打包的配置表,游戏用不到。
  • Explicit Assets 指定所管理的资源文件,只能一个个加,还是选全目录有用。
  • ExplicitBlueprints 指定管理某种类型的蓝图资产。
  • AssetCollection 指定 Collection 名称。

查看资源分配情况

UE 提供了用于查看 Pak 文件内容大小的工具 Asset Audit。可通过 Windows - Developer Tools - Asset Audit 打开。

划分 Chunk 后,我们无法直观地看出每个 Pak 内有哪些资产,通过这个工具就可以查看其资源路径,大小,属于哪个 Chunk 等信息。刚刚打开时,如果显示为空,则需要点击 Add Chunks。通过在每一行上点击右键可调出 Size Map 来直观地分析资源占用情况。

注意:Asset Audit 列出来的大小是未经过压缩的大小


参考资料: 
[1]: UE 热更新:资产管理与审计工具
[2]: Cooking Content and Creating Chunks in Unreal Engine


封面:自制
*本文内容系作者独立观点,不代表 indienova 立场。未经授权允许,请勿转载。

Dluck 

Gamer / Developer 

您可能还会对这些文章感兴趣

参与此文章的讨论

暂无关于此文章的评论。

您需要登录或者注册后才能发表评论

登录/注册