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.