Description

The gameplay tag system depends on tags being registered with the global manager as valid in order to correctly read them off disk. Two different issues are combining to cause a confusing ensure and data loss when using an invalid gameplay tag inside a literal BP GameplayTagContainer pin. The ensure is this unhelpful message:

Error: Ensure condition failed: false Engine/Source/Runtime/GameplayTags/Private/GameplayTagsManager.cpp [Line: 1724]
Requested Tag ( was not found. Check tag data table.

The ensure is happening because SGameplayTagContainerGraphPin::ParseDefaultValueData does not correctly parse the default string "(GameplayTags=(()))" which is an alternate way of saying the container is empty. The parsing code needs to be fixed to not ensure on a valid but empty container

However, it's only getting that as a string to parse because the blueprint pin code does an import/export of the container and FGameplayTag::ImportTextItem silently ignores issues with invalid tags and treats them like they are empty. This is a bug because invalid tags loaded in other ways cause load warnings and are passed through.

Steps to Reproduce
  1. Create a new blueprint of an actor, add a "Make Literal Gameplaytag Container" node
  2. Hit edit to select tag, and add a new tag with a temp name like Foobar
  3. Save blueprint
  4. Go into gameplay tag project settings and remove the tag you just added
  5. Restart editor WITHOUT resaving blueprint
  6. Open blueprint you saved, ensure will occur
Callstack

Error: Ensure condition failed: false Engine/Source/Runtime/GameplayTags/Private/GameplayTagsManager.cpp [Line: 1724]
Requested Tag ( was not found. Check tag data table.

 [Inline Frame] UnrealEditor-GameplayTags.dll!UGameplayTagsManager::RequestGameplayTag::__l12::<lambda_1d633abed328596175b95dae05ce725f>::operator()() Line 1724
UnrealEditor-GameplayTags.dll!UGameplayTagsManager::RequestGameplayTag(FName TagName, bool ErrorIfNotFound) Line 1724
UnrealEditor-GameplayTags.dll!FGameplayTag::RequestGameplayTag(const FName & TagName, bool ErrorIfNotFound) Line 1085
UnrealEditor-GameplayTagsEditor.dll!SGameplayTagContainerGraphPin::ParseDefaultValueData() Line 66
UnrealEditor-GraphEditor.dll!SGraphPinStructInstance::GetDefaultValueWidget() Line 95
UnrealEditor-GraphEditor.dll!SGraphPin::Construct(const SGraphPin::FArguments & InArgs, UEdGraphPin * InPin) Line 225
UnrealEditor-GameplayTagsEditor.dll!SGameplayTagGraphPin::Construct(const SGameplayTagGraphPin::FArguments & InArgs, UEdGraphPin * InGraphPinObj) Line 11
[Inline Frame] UnrealEditor-GameplayTagsEditor.dll!SGameplayTagContainerGraphPin::Construct(const SGameplayTagContainerGraphPin::FArguments & InGraphPinObj, UEdGraphPin *) Line 10
[Inline Frame] UnrealEditor-GameplayTagsEditor.dll!RequiredArgs::T1RequiredArgs<UEdGraphPin * &>::CallConstruct(const TSharedRef<SGameplayTagContainerGraphPin,0> &) Line 879
UnrealEditor-GameplayTagsEditor.dll!TSlateDecl<SGameplayTagContainerGraphPin,RequiredArgs::T1RequiredArgs<UEdGraphPin * &>>::operator<<=(const SGameplayTagContainerGraphPin::FArguments & InArgs) Line 1101
UnrealEditor-GameplayTagsEditor.dll!FGameplayTagsGraphPanelPinFactory::CreatePin(UEdGraphPin * InPin) Line 29
UnrealEditor-GraphEditor.dll!FNodeFactory::CreatePinWidget(UEdGraphPin * InPin) Line 236

Have Comments or More Details?

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

0
Login to Vote

Fixed
ComponentUE - Gameplay
Affects Versions4.264.275.0-early access
Target Fix5.0-early access
Fix Commit15562556
Main Commit15562653
Release Commit15562556
CreatedFeb 23, 2021
ResolvedMar 1, 2021
UpdatedNov 30, 2022