Quick answer: Unreal soft references to data assets return null in BeginPlay? Soft references are lazy — not loaded until you ask. Use AssetManager primary types for game-startup data.

An ItemDB data asset is soft-referenced by the GameInstance. BeginPlay calls TryLoad and gets null — the asset hasn’t been pulled in.

Primary Asset Type

Register your data asset type as a Primary Asset (UAssetManager). Specify a directory and rules; AssetManager pre-loads at startup.

Async-Load Explicit

UAssetManager::GetStreamableManager().RequestAsyncLoad(SoftRef.ToSoftObjectPath(),
  FStreamableDelegate::CreateUObject(this, &UMyClass::OnLoaded));

Loads on demand. Use for assets that aren’t needed at startup.

Force Sync If Critical

For startup-critical assets: SoftRef.LoadSynchronous(). Blocks the main thread; only acceptable during loading screen.

AssetManager Primary Asset Rules

DefaultGame.ini configures cook-time inclusion. Primary assets are guaranteed to be cooked into the build.

Verifying

Required data assets are available at BeginPlay. Lazy-loaded assets resolve via async callbacks; null returns only for truly missing keys.

“Soft refs are lazy. AssetManager primary types preload; async or sync as needed.”

Promote game-critical data assets to Primary Asset Types — you stop debugging null references in BeginPlay.