UE5 增量 Cook
UE 版本 5.5.4
- 关键
-iterativecooking
添加了之后的 log 如下

这部分 log 比较重要
cs 中


即 -iterativecooking 等同于 -iterate
数据结构
1. FAssetPackageData


简单来说根据 GetPackageSavedHash() 判断包是否修改
根据 DiskSize 判断包修改的状态
-
状态
![image-20250815213816678]()
-
包类型分类:
- 包分为 已 Cook,未 Cook,占位包 (NeverCookPlaceholder)和 脚本包 Script
- 每种类型有
Identical相同,Modified修改 和Removed删除 状态。
2. ICookedPackageWriter
2. FCookSavePackageContext 烘焙保存包上下文
对一个给定的平台,传递给 SavePackage 的上下文数据。

实际上就是存储了
函数逻辑
1. LoadBeginCookIterativeFlags



这里的 CookWorkerRequests 是在 COTFS 的 Intialize 函数中初始化的

这个函数的目的也只是遍历传进来的 FBeginCookContext ,设置其中的 PlatformContext 的 相关 flag,如不是 FullBuild,允许 IterativeResults 等,以及
bPopulateMemoryResultsFromDiskResults 是否允许从磁盘的结果填充记忆结果。
2. PopulateCookedPackages
StartCookByTheBook 中 LoadBeginCookIterativeFlags 结束之后,走到 BeginCookSandbox 中

这里会根据 LoadBeginCookIterativeFlags 中指定的 bPopulateMemoryResultsFromDiskResults 执行后续逻辑,添加目标平台,执行 PopulateCookedPackages

这是进行差异化判断的核心函数


ComputePackageDifferences 是另一个核心函数
3. ComputePackageDifferences
这个函数很长,但是逻辑是比较清晰的
前面先调用

根据 FAssetPackageData 中的 Hash 值直接判断是否发生变化

如果没有变化,就根据 DiskSize 进行状态的变更,添加到 OutDifference.Packages 数组中,记录状态
这里用 Mermaid 画一个流程图
