TitleProperty is a UPROPERTY metadata option that improves how arrays of structs appear in the Details panel.
It is commonly used when you have a TArray of USTRUCT entries and each entry has a name, label, ID, or title field. Instead of showing every collapsed entry as a plain index like [0], [1], or [2], Unreal can display a useful value from inside the struct.
The problem
Suppose you have an editable array of enemy wave data:
TArray<FEnemyWaveEntry> WaveEntries;Without TitleProperty, the Details panel may show collapsed rows like this:
Wave Entries
[0]
[1]
[2]That works, but it is not very readable. You have to expand each entry to know what it represents.
With TitleProperty, the same array can display something closer to this:
Wave Entries
[0] Grunt Wave
[1] Shield Enemy Wave
[2] Boss WaveThis makes large editable arrays much easier to scan.
Watch the video to see what I mean exactly.
Basic example
First, create a struct with a property that can be used as the row title.
USTRUCT(BlueprintType)
struct FEnemyWaveEntry
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Wave")
FName EntryName;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Wave")
TSubclassOf EnemyClass;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Wave", meta=(ClampMin="1", UIMin="1"))
int32 Count = 1;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Wave", meta=(ClampMin="0.0", UIMin="0.0"))
float SpawnDelay = 0.25f;
};
Then, on the array property, you add TitleProperty:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Enemy Waves", meta=(TitleProperty="EntryName"))
TArray WaveEntries;
The important part is this:
meta=(TitleProperty="EntryName")
This tells Unreal: for each element in WaveEntries, look inside the FEnemyWaveEntry struct and use the EntryName property as the collapsed row title.
TitleProperty should go on the array, not on the property inside the struct.
This is correct:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Enemy Waves", meta=(TitleProperty="EntryName"))
TArray WaveEntries;
The value you pass to TitleProperty must be the name of a reflected property inside the struct. So this works because EntryName is marked with UPROPERTY:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Wave")
FName EntryName;
Good fields for TitleProperty are usually things like:
FName EntryName;
FString DisplayName;
FText EditorLabel;
FName ItemId;
The main thing to remember is that TitleProperty is only for editor display. It does not change runtime behavior, serialization, replication, or gameplay logic. It simply makes arrays of structs easier to inspect and edit in the Details panel.