I am trying to dynamicly load blueprints:
First I load assets in UObjectLibrary like that:
UObjectLibrary * lib = UObjectLibrary::CreateLibrary(base_class, true, GIsEditor);
lib->AddToRoot();
int32 loaded = lib->LoadBlueprintAssetDataFromPath(path);
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Cyan, FString::FromInt(loaded) + TEXT(" objects loaded for lib - ") + name);
Then i`am trying to find asset by name, then load in by FAssetData::GetAsset, and return TSubclassOf<Ship> to spawn in blueprints;
lib->GetAssetDataList(Assets);
for (int32 i = 0; i < Assets.Num(); ++i) {
FAssetData& assetData = Assets*;
if (assetData.AssetName.ToString() == name) {
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, TEXT("AssetFound - ") + assetData.AssetName.ToString());
if (!assetData.GetAsset())
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Get ship: Failed to load object by GetAsset - ") + assetData.AssetName.ToString());
UBlueprint * bp = Cast<UBlueprint>(assetData.GetAsset());
if (bp) {
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, TEXT("Get ship: bleprint cast done for asset - ") + assetData.AssetName.ToString());
if (bp->GeneratedClass->IsChildOf(AShip::StaticClass())) {
return *(bp->GeneratedClass);
} else {
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Get ship: Class isn`t cild of AShip- ") + assetData.AssetName.ToString());
}
} else {
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Get ship: bleprint cast FAILED for asset - ") + assetData.AssetName.ToString());
}
}
}
In editor this code works perfectly, as well as in Standalone>. But when i bush Launch, and Unreal builds really “standalone” game for me, assedData.GetAsset returns NULL. I can`t undestand why it fails to load object.