Description

UDataAsset's constructor assumes itself to be the native class, and caches that value for use by the asset registry. However, if the data asset type is defined in a blueprint (i.e. subclassing UPrimaryDataAsset), the NativeClass will incorrectly display as a blueprint class.

Initially proposed fix is to iterate up the parent chain until a native parent is found:

UClass* MostDerivedNativeClass = GetClass();
while (MostDerivedNativeClass)
{
	if (MostDerivedNativeClass->HasAnyClassFlags(CLASS_Native | CLASS_Intrinsic))
	{
		// Found native class
		break;
	}
	else
	{
		MostDerivedNativeClass = MostDerivedNativeClass->GetSuperClass();
	}
}
NativeClass = MostDerivedNativeClass; 

However, this could be further improved to store the registry tag at save time and avoid adding data to the asset itself.

Steps to Reproduce
  1. Create a blueprint MyDerivedDataAsset that subclasses UPrimaryDataAsset
  2. Create a Data Asset of type MyDerivedDataAsset
  3. Hover the asset in the content browser, and note that NativeClass points to a blueprint class

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-354392 in the post.

0
Login to Vote

Unresolved
ComponentUE - Gameplay
Affects Versions5.65.8
CreatedNov 18, 2025
UpdatedNov 18, 2025
View Jira Issue