This is the code for UBlueprint::GetBlueprintParentClassFromAssetTags:
UClass* UBlueprint::GetBlueprintParentClassFromAssetTags(const FAssetData& BlueprintAsset)
{
UClass* ParentClass = nullptr;
FString ParentClassName;
if(!BlueprintAsset.GetTagValue(FBlueprintTags::NativeParentClassPath, ParentClassName))
{
BlueprintAsset.GetTagValue(FBlueprintTags::ParentClassPath, ParentClassName);
}
if(!ParentClassName.IsEmpty())
{
UObject* Outer = nullptr;
ResolveName(Outer, ParentClassName, false, false);
ParentClass = FindObject<UClass>(Outer, *ParentClassName);
}
return ParentClass;
}
Shouldn’t we be calling BlueprintAsset.GetTagValue(FBlueprintTags::ParentClassPath, ParentClassName))
and then checking for FBlueprintTags::NativeParentClassPath
only after failing to find the ParentClassPath
?
With this current implementation, I can’t make an Editor Utility Blueprint that only supports BP classes, because this code always checks for NativeParentClassPath first and then, upon finding a NativeParentClass, disregards the Blueprint Parent class. Even though you can select a blueprint class a being supported by an Editor Utility Blueprint, this code prevents actually supporting Blueprint classes.