Quick answer: The cooker only includes assets something hard-references. A Data Asset loaded by name/path with no hard reference is excluded. Add its folder to “Additional Asset Directories to Cook”, or make it a Primary Data Asset.

A loot table Data Asset works in PIE but is null in the packaged build. Nothing hard-references it — it’s loaded dynamically by path — so the cooker dropped it.

The Cooker Follows Hard References

Packaging only includes assets reachable through hard references from your maps/code. A Data Asset you LoadObject by string path has no hard reference — the cooker can’t see it’s needed.

Option 1: Cook the Directory

Project Settings → Packaging → Additional Asset Directories to Cook. Add the folder containing your Data Assets. Everything in it ships, referenced or not.

Option 2: Primary Data Assets

Make the class a UPrimaryDataAsset and register its type in the Asset Manager (Project Settings → Asset Manager → Primary Asset Types to Scan). The Asset Manager then knows to cook them and you load them via its API — the “blessed” path for data-driven content.

Option 3: Hard Reference It

If there’s a natural owner (a GameMode, a config), give it a TObjectPtr to the asset. A hard reference means the cooker includes it automatically.

Verifying

Package the build. The Data Asset loads and is non-null at runtime. The build’s asset registry / cook log lists it.

“The cooker ships what’s hard-referenced. Dynamically-loaded Data Assets need a cook directory, Primary Asset registration, or a real reference.”

For anything data-driven, commit to the Asset Manager + Primary Data Assets early — it makes cooking, async loading, and DLC all work the same way.