Description

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.

 

Steps to Reproduce

Repro steps (new project):

  1. Enable the Common UI plugin (for the UITag, UIActionTag blueprint types)
  2. Create a new actor blueprint
  3. Add a new variable 'MyUITag' of type UITag and drag it into the event graph
  4. Drag from the 'MyUITag' pin. In the blueprint action menu, select Equal (==)
  5. Observe: The Equal node is placed, but MyUITag is not connected to it
  6. Expected: MyUITag is connected to the Equal node
  7. Then, try connecting the pins manually
  8. Observe: The pins won't connect
  9. Expected: The pins connect
Callstack

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++
 

Have Comments or More Details?

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

0
Login to Vote

Unresolved
ComponentUE - Editor - UI Systems
Target Fix5.8
CreatedJan 5, 2026
UpdatedJan 6, 2026
View Jira Issue