Context
UITag and UIActionTag are blueprint-exposed struct classes that derive from GameplayTag. GameplayTag variables can be compared in blueprint with ==. Under the hood, the node maps to
UBlueprintGameplayTagLibrary::EqualEqual_GameplayTag
Problem
The CommonUI plugin defines GameplayTag subclasses that don't work with the == node in blueprint. The blueprint action menu shows Equal (==) as a suggestion when dragging from a UITag pin, but selecting it results in a disconnected node. Trying to connect a UITag pin to a == node fails.
In engine code, UK2Node_PromotableOperator::UpdatePinsFromFunction evaluates a UITag pin as not compatible with a GameplayTag function input. The following evaluates to false:
const bool bValidPromo = FTypePromotion::IsValidPromotion(HighestLinkedType, FunctionPinType) || (NodePin->LinkedTo.Num() > 0 && FTypePromotion::HasStructConversion(NodePin, NodePin->LinkedTo[0]));
Expected Behavior
UITag and UIActionTag should be comparable in blueprint.
It's up for discussion whether they should only be comparable with GameplayTags of the exact same struct type, or with any GameplayTag.
Repro steps (new project):
Non-fatal, callstack is for reference
> UnrealEditor-BlueprintGraph.dll!UK2Node_PromotableOperator::UpdatePinsFromFunction::__l2::<lambda_1>::operator()(const FEdGraphPinType & FunctionPinType, UEdGraphPin * NodePin) Line 1413 C++ UnrealEditor-BlueprintGraph.dll!UK2Node_PromotableOperator::UpdatePinsFromFunction(const UFunction * Function, UEdGraphPin * ChangedPin, bool bIsFromConversion) Line 1473 C++ UnrealEditor-BlueprintGraph.dll!UK2Node_PromotableOperator::EvaluatePinsFromChange(UEdGraphPin * ChangedPin, const bool bFromConversion) Line 1060 C++ UnrealEditor-BlueprintGraph.dll!UK2Node::PinConnectionListChanged(UEdGraphPin * Pin) Line 602 C++ UnrealEditor-Engine.dll!UEdGraphSchema::TryCreateConnection(UEdGraphPin * PinA, UEdGraphPin * PinB) Line 522 C++ UnrealEditor-BlueprintGraph.dll!UEdGraphSchema_K2::TryCreateConnection(UEdGraphPin * PinA, UEdGraphPin * PinB) Line 2290 C++ UnrealEditor-GraphEditor.dll!FDragConnection::DroppedOnPin(const UE::Math::TVector2<float> & ScreenPosition, const UE::Math::TVector2<float> & GraphPosition) Line 328 C++ UnrealEditor-GraphEditor.dll!SGraphPin::OnDrop(const FGeometry & MyGeometry, const FDragDropEvent & DragDropEvent) Line 907 C++ [Inline Frame] UnrealEditor-Slate.dll!FSlateApplication::RoutePointerUpEvent::__l10::<lambda_3>::operator()(const FArrangedWidget &) Line 5566 C++ UnrealEditor-Slate.dll!FEventRouter::Route<FReply,FEventRouter::FBubblePolicy,FPointerEvent,`FSlateApplication::RoutePointerUpEvent'::`10'::<lambda_3>>(FSlateApplication * ThisApplication, FEventRouter::FBubblePolicy RoutingPolicy, FPointerEvent EventCopy, const FSlateApplication::RoutePointerUpEvent::__l10::<lambda_3> & Lambda, ESlateDebuggingInputEvent DebuggingInputEvent) Line 461 C++ UnrealEditor-Slate.dll!FSlateApplication::RoutePointerUpEvent(const FWidgetPath & WidgetsUnderPointer, const FPointerEvent & PointerEvent) Line 5561 C++
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-359341 in the post.
| 0 |
| Component | UE - Editor - UI Systems |
|---|---|
| Target Fix | 5.8 |
| Created | Jan 5, 2026 |
|---|---|
| Updated | Jan 6, 2026 |