When a Composite Data Table is included in the "Gameplay Tag Table List" on the Project Settings, making and saving changes to one of its Parent Tables does not cause the Gameplay Tag Tree to refresh. The tree is only updated when the composite table itself is resaved (even without any changes). This is a problem because:
1) saving the composite table does a checkout of the asset, which partially negates one of the advantages of working with a composite table - that it allows easy cooperation between multiple teams, where each team works only on one of the parent tables.
2) a workaround would be to add all parent tables to the "Gameplay Tag Table List", but now we have to keep the same information in sync on two locations (Project Settings and Composite Table Details)
A rebuild of the gameplay tag tree is currently triggered by FGameplayTagsEditorModule::OnPackageSaved() when the saved package contains a table registered through the Project Settings in the GameplayTagTables array from class UGameplayTagsManager. If only the composite table is registered, saving any of its parent tables is not enough to trigger the refresh.
As mentioned in the linked EPS case, one possible solution to this would be to include the following check in FGameplayTagsEditorModule::OnPackageSaved():
for (UDataTable* GameplayTagTable : Manager.GameplayTagTables)
{
if (UCompositeDataTable* CompositeTable = Cast<UCompositeDataTable>(GameplayTagTable))
{
if (CompositeTable->IsParentTable(DataTable))
}
}
Additionally, this requires a new function in UCompositeDataTable:
bool UCompositeDataTable::IsParentTable(const TObjectPtr<UDataTable>& TableToCheck)
{ return ParentTables.Contains(TableToCheck); }1. Create a new DataTable asset "DT_Parent" using GameplayTagTableRow
2. Create a new CompositeDataTable asset "DT_Composite" using GameplayTagTableRow
2.1. Edit DT_Composite and set DT_Parent as a parent
2.2. Save and close
3. On the Project Settings, under the GameplayTags page, add DT_Composite to the "Gameplay Tag Table List"
4. Create a new blueprint actor "BP_Actor"
4.1. Add a variable "MyTag" of type "Gameplay Tag"
4.2. Compile, save.
5. Open DT_Parent and add a new tag "MyTestTag". Save the asset.
6. Open BP_Actor and edit the default value for variable MyTag. Note that "MyTestTag" does not appear.
7. Re-save DT_Composite
8. Repeat step 6 and note that "MyTestTag" now appears correctly in the list.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-356915 in the post.