Error17. GameInstanceInit阶段过早触发异步加载导致崩溃
小于 1 分钟
问题描述

void UExorcistGameInstance::Init()
{
Super::Init();
if(Request.IsEmpty()) return;
UAsyncMultiDataCollectionLoader* Loader = UAsyncMultiDataCollectionLoader::AsyncMultiDataCollectionLoader(this,Request,LoadBundles);
if(!Loader) return;
Loader->OnSuccess.AddDynamic(this, &UExorcistGameInstance::OnDataCollectionLoaded);
Loader->Activate();
}
void UExorcistGameInstance::OnDataCollectionLoaded(const TArray<FDataCollectionInstance>& DefinitionCollections)
{
if(DefinitionCollections.IsEmpty()) return;
UExorcistSaveGame* SaveSettings = UExorcistDataStorageLibrary::LoadSaveData(this);
if (!SaveSettings) return;
UUserDataSubsystem *UserData = GetSubsystem<UUserDataSubsystem>();
if(!UserData) return;
for(auto DataCollection : DefinitionCollections)
{
if(DataCollection.DefinitionInstance && DataCollection.PrimaryAssetType == TEXT("Inventory"))
{
UExorcistSaveDataValidatorLibrary::ValidateInventoryData(SaveSettings, DataCollection.DefinitionInstance);
}
else if(DataCollection.DefinitionInstance && DataCollection.PrimaryAssetType == TEXT("Hero"))
{
UExorcistSaveDataValidatorLibrary::ValidateHeroData(SaveSettings, DataCollection.DefinitionInstance);
}
UserData->AddDefinitionCollection(DataCollection.PrimaryAssetType, DataCollection.DefinitionInstance);
}
UExorcistDataStorageLibrary::SaveGameData(this, SaveSettings);
UserData->MarkDataReady();
}