Asynchronous Asset Loading
- Works identically in development and cooked data.
- Hard UObject pointer property → loaded with containing object; careless use loads 100% of assets at startup. FSoftObjectPath (string, handles cooking and redirects); TSoftObjectPtr is basically a TWeakObjectPtr wrapping FSoftObjectPath, templated to restrict editor UI. Get(); ToSoftObjectPath().
- Asset Registry: metadata searchable without loading (AssetRegistrySearchable; FAssetData). ObjectLibrary: list of loaded objects or FAssetData from a path; designers add assets without master list.
- FStreamableManager (put in global singleton e.g. GameSingletonClassName); SynchronousLoad blocks (may stall main thread); RequestAsyncLoad loads group and calls delegate. StreamableManager keeps hard references until the delegate is called, then releases — hard reference elsewhere to keep them.
- Converting gameplay code takes time but yields far fewer stalls and lower memory.