Hey Daniel, since this question has been lingering unanswered for a while I’m investigating this, but since this part of the engine code is out of my wheelhouse I’ll primarily gather more info before consulting my colleagues.
Looking at FGameFeaturePluginState_Loading::UpdateState() I would expect the plugin’s state to only transition to Loaded if:
- All initially requested assets are loaded, whether that’s synchronously via that blocking load or async due to returning.
- Or, if BundleHandle somehow got nulled in the meantime
Since you’re running into behavior you didn’t expect, would it be possible for you to add some debugging code?
- In FGameFeaturePluginState_Loading::BeginState() it would be useful to debug log all requested primary asset paths, BundleHandle->GetRequestedAssets(), right before BindCompleteHandle()
- In FGameFeaturePluginState_Loading::UpdateState() right before SetTransition(Loaded):
- It would be useful to log whether BundleHandle is still valid, and if so to log out GetRequestedAssets() and GetLoadedAssets().
- A call to DumpLoadedAssetState there would be useful too.
Can you report back with that info? I understand if you’d want to anonymize the asset names.
The assets that hadn’t finished loading, are they ones you directly returned in your policy’s GetPreloadAssetListForGameFeature()? If so, are they also included in BundleHandle->GetRequestdAssets() when you log them out in BeginState?