Im trying to preload some assets before going into game. It seems to work on windows but doesnt run on mobile. Any help is appreciated.
` UGameGlobals* GG = Cast(GEngine->GameSingleton);
if (!GG || !BaseType)
{
UE_LOG(LogTemp, Error, TEXT("!GG || !BaseType is true"));
return;
}
if (LoadAssetPaths.Num() <= 0)
{
UE_LOG(LogTemp, Error, TEXT("LoadAssetPath.IsEmpty is true"));
return;
}
/*
UObjectLibrary* ObjectLibrary = UObjectLibrary::CreateLibrary(const_cast<UClass*>(BaseType), true, true);
ObjectLibrary->AddToRoot();
ObjectLibrary->LoadAssetDataFromPaths(LoadAssetPaths);
ObjectLibrary->LoadAssetsFromAssetData();
//ObjectLibrary->LoadBlueprintAssetDataFromPath(LoadAssetPath);
TArray<FAssetData> AssetDataLists;
ObjectLibrary->GetAssetDataList(AssetDataLists);
*/
TArray AssetDataLists;
const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(TEXT("AssetRegistry"));
AssetRegistryModule.Get().SearchAllAssets(false);
TArray<FName> LoadAssetNamePaths;
for(const FString insertPath : LoadAssetPaths)
{
LoadAssetNamePaths.Add(*insertPath);
}
FARFilter Filter;
Filter.bRecursivePaths = true;
Filter.PackagePaths.Append(LoadAssetNamePaths);
Filter.ClassNames.Add(BaseType->GetFName());
AssetRegistryModule.Get().GetAssets(Filter, AssetDataLists);
if (AssetDataLists.Num() <= 0)
{
UE_LOG(LogTemp, Error, TEXT("AssetDataLists.Num() <= 0 is true"));
return;
}
/*/
FLoadThreadRunnable* LoadRunable = new FLoadThreadRunnable;
LoadRunable->SetParameter([](TArray<FAssetData> assetList)
{
UE_LOG(LogTemp, Log, TEXT("Request LoadAsset start!~~~~~~~~~~~~~~~~~~~~~~~~~~AsyncLoadWithPaths!"));
UGameGlobals* GG = Cast<UGameGlobals>(GEngine->GameSingleton);
for (FAssetData searchData : assetList)
{
UE_LOG(LogTemp, Log, TEXT("Request LoadAssetName = %s"), *searchData.GetFullName());
if (!searchData.IsAssetLoaded())
{
FStringAssetReference LoadAssetRef(searchData.ToStringReference());
GG->GetLoadStreamManager().RequestAsyncLoad(LoadAssetRef, [searchData]()
{
UE_LOG(LogTemp, Log, TEXT("LoadAssetName = %s"), *searchData.GetFullName());
return;
});
}
}
}, AssetDataLists);
FString ThreadName("LoadRunable_");
ThreadName.AppendInt(LoadThreadCount++);
FRunnableThread* LoadThread = FRunnableThread::Create(LoadRunable, *ThreadName, 0, TPri_Highest);
//LoadRunable->Stop();
LoadThread->WaitForCompletion();
delete LoadThread;
delete LoadRunable;
/*/
for (FAssetData searchData : AssetDataLists)
{
UE_LOG(LogTemp, Log, TEXT("Request LoadAssetName = %s"), *searchData.GetFullName());
if (!searchData.IsAssetLoaded())
{
FStringAssetReference LoadAssetRef(searchData.ToStringReference());
GG->GetLoadStreamManager().RequestAsyncLoad(LoadAssetRef, [searchData]()
{
UE_LOG(LogTemp, Log, TEXT("LoadAssetName = %s"), *searchData.GetFullName());
return;
});
}
}
//*/
return;
`
sorry how do you format this code to make it better viewable