This is a note from our game dev journey.
Recently, I found myself deep in Unreal Engine, working on a system using custom C++ data assets. I wanted to display some key properties—like enums with nice, readable names—directly in the Content Browser’s Columns View.
I thought, “Hey, how hard can this be?” Turns out, it’s not hard… but it’s definitely full of Unreal’s usual little gotchas. Here’s what I learned, what tripped me up, and how you can avoid falling into the same traps

The Goal: Custom Properties as Columns
If you use Unreal’s Columns View, you know how nice it is to see texture sizes or other metadata without opening every asset. I wanted that for my own data assets—especially for enum values, so I (or designers) could instantly see at a glance what kind of “card” or type an asset was.
Step One: Discovering Asset Registry Tags
The secret sauce is Asset Registry Tags—metadata that Unreal uses to fill out those columns.
After a bit of research, I found out you expose them by overriding GetAssetRegistryTags in your asset class.
Here’s the core trick:
#if WITH_EDITOR
void UMyDataAsset::GetAssetRegistryTags(FAssetRegistryTagsContext Context) const
{
Super::GetAssetRegistryTags(Context);
Context.AddTag(FAssetRegistryTag(TEXT("MyProperty"),
TEXT("SomeValue"),
FAssetRegistryTag::ETagType::TT_Alphabetical));
}
#endif
Code language: C++ (cpp)
Pro tip: In Unreal 5.4+, the signature uses FAssetRegistryTagsContext.
Making Enums Human-Readable
I didn’t want to show just an enum’s underlying integer value. I wanted the pretty, editor-visible DisplayName (like “Road” or “Quest”, not “2” or “4”).
So I wrote a little template helper function:
template <typename T>
FString GetEnumDisplayName(T EnumValue)
{
const UEnum* EnumPtr = StaticEnum<T>();
return EnumPtr ? EnumPtr->GetDisplayNameTextByValue(static_cast<int64>(EnumValue)).ToString()
: TEXT("Invalid");
}
Code language: C++ (cpp)
Now, I could do this in my asset tag code:
Context.AddTag(FAssetRegistryTag(TEXT("CardType"),
GetEnumDisplayName(CardType),
FAssetRegistryTag::ETagType::TT_Alphabetical));
Code language: CSS (css)
The First “Wait, Why Isn’t It Working?” Moment
I did all of this, compiled, and…
Nothing appeared.
No new columns, no metadata, nothing.
I started troubleshooting:
- I checked my tag key for typos and spaces.
- I checked my function signature.
- I double-checked that I was using
BlueprintTypeon my classes.
The Critical Realization: Caching and Asset Save State
Here’s the trick Unreal doesn’t tell you:
Asset registry tags only update when you save the asset.
And, sometimes, the Content Browser doesn’t update unless you also restart the editor. (Unreal loves to cache things for performance.)
So:
- I restarted the editor (multiple times)
- Rebuilt the code outside of live editing (obvs)
- I made sure to actually save all my assets after changing the code.
- I restarted the editor again
And then… at some point, my tags mysteriously showed up!
Debugging Checklist: What To Try If It’s Not Working
If you’re stuck like I was, try these steps:
- Is your function signature right for your engine version?
- UE 5.4+ uses
FAssetRegistryTagsContext Context(by value, not reference).
- UE 5.4+ uses
- Are you saving your assets after code changes?
- Did you restart the editor?
- Is your asset a native C++ data asset, not a Blueprint?
- Are you using concise tag keys, without spaces?
- (For inheritance) Is your override in the actual instantiated class?
Summary: My Lessons Learned
- Asset registry tags are powerful but only update on asset save.
- The editor sometimes needs a restart for new columns to show up.
- Always use C++ data assets, not Blueprints, if you want these tags.
- If something’s not working, check function signatures and the asset’s class type.
- Use a helper to get enum display names for readable columns.
Here’s the Final Pattern That Worked
template <typename T>
FString GetEnumDisplayName(T EnumValue)
{
const UEnum* EnumPtr = StaticEnum<T>();
return EnumPtr ? EnumPtr->GetDisplayNameTextByValue(static_cast<int64>(EnumValue)).ToString()
: TEXT("Invalid");
}
#if WITH_EDITOR
void UMyDataAsset::GetAssetRegistryTags(FAssetRegistryTagsContext Context) const
{
Super::GetAssetRegistryTags(Context);
Context.AddTag(FAssetRegistryTag(TEXT("CardType"),
GetEnumDisplayName(CardType),
FAssetRegistryTag::ETagType::TT_Alphabetical));
}
#endif
Code language: PHP (php)
- Save your assets after you change this code.
- Restart the editor if the columns still don’t appear.
- Enjoy having custom, readable columns in your Content Browser!
If you’ve struggled with this in Unreal, know that you’re not alone—and I hope this saves you a few hours of head-scratching!


