Language:
Page Info
Skill Level:
Engine Version:
Share

烘焙和数据块划分

烘焙游戏进行发布或在非编辑器平台上进行测试时,可使用 数据块(Chunking) 将数据拆分为数个 .pak 文件,然后独立进行部署。数据块划分现已被整合到资源管理器(Asset Manager)中,可使用 主资源标签(Primary Asset Labels)规则覆盖(Rules Overrides) 进行设置。ShooterGame 范例项目中包含数据块的最佳实例。ShooterGame 构建了 3 个数据块:数据块 1 是“Sanctuary”地图;数据块 2 是“Highrise”地图;数据块 3 则是其他所有数据。ShooterGame 项目中选择的是 Primary Asset Labels,但两种方法我们皆会讨论。

主资源规则(Primary Asset Rules)

主资源规则 用于决定哪个主资源对哪个次资源拥有管理权限,以及在烘焙过程中如何处理资源。这些规则由 FPrimaryAssetRules 结构所定义,由 资源管理器NEW! 所使用,决定烘焙时的资源处理方式。如需了解 FPrimaryAssetRules 中可用选项的详细信息,请查看其 API 页面 。您也需要查看 FPrimaryAssetRules` API 页面 上定义的烘焙规则。

主资源标签(Primary Asset Labels)

主资源标签UPrimaryDataAsset 的最小覆盖,对其进行设置后可指定其他资源进行数据块划分和烘焙。其在游戏中通常不会被加载,但在烘焙和划分数据块时需要使用,可对其规则、列表和其他项目资源的优先级进行设置。以 ShooterGame 为例,创建的标签能够指定放置到诸多数据块中的资源。

HighriseLabel.png

这个主资源标签名为“HighriseLabel”,可显式管理游戏的“Highrise”地图资源,并标明其属于数据块 2。

此时,“Highrise”资源与其自身的主资源 ID“Map:/Game/Maps/Highrise”、以及“HighriseLabel”和“PrimaryAssetLabel:HighriseLabel”的主资源 ID 相关联。因为地图不含其自身的数据块 ID,划分数据块的过程将使用“HighriseLabel”中找到的数据块 ID:2。此外,地图中的所有次资源将与数据块 2 相关联。需要对“Sanctuary”地图和数据块 1 执行相似的设置。不带数据块 ID(或带负数据块 ID)的资源将被划入数据块 0,默认 .pak 文件,项目的初始地图“ShooterEntry”将被保存。由多个主资源标签引用的词资源在这些标签中将与最高优先级相关联。在多个标签与最高优先级相关联的事件中,资源将与每个标签相关联。

ReferenceViewer.png

引用查看器(Reference Viewer)将显示主资源标签和关卡地图的管理关系。

Management.png

双击“Map:/Game/Maps/Highrise”将显示其由“PrimaryAssetLabel:HighriseLabel”所管理。

规则覆盖(Rules Overrides)

规则覆盖(Rules Overrides) 可用于建立特定主资源的优先级和数据块设置。如要使用规则覆盖替代主资源标签构建 ShooterGame 的 3 数据块设置,需要在 DefaultGame.ini 中创建以下代码段:

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

DefaultGame.ini 文件中的烘焙和数据块划分规则。我们已在此例中的初始地图“ShooterEntry”中添加一个显式引用。

这将把我们的主游戏地图设置到特定的数据块中,会使所有引用也被添加到这些数据块。最终的条目管理数据块 0,确保游戏首次启动时加载的地图引用内容保存在默认数据块 0 中。-1 的优先级值将把优先级设为默认值 1。

相关页面