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.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-354392 in the post.
| 0 |
| Component | UE - Gameplay |
|---|---|
| Affects Versions | 5.6, 5.8 |
| Created | Nov 18, 2025 |
|---|---|
| Updated | Nov 18, 2025 |