Description

Summary

A UInputTriggerChordAction does not fire when the action it references (the "chording action") is mapped in a different Input Mapping Context with a lower priority than the IMC containing the chorded action. Both keys can be held simultaneously and the chorded action never produces a Triggered event.

This blocks the documented and expected use case of layering context-specific chords on top of a base/default input map — for example, a vehicle or mount IMC defining a chord that uses the player's base modifier action.

Reproduction

Setup (in-editor)

  1. Create two Input Actions:
  • IA_Chording — Value Type: Boolean
  • IA_Chorded — Value Type: Boolean
  1. Create two Input Mapping Contexts:
  • IMC_Base
  • IMC_Overlay
  1. In IMC_Base, add a mapping: IA_Chording → any key (e.g. A).
  2. In IMC_Overlay, add a mapping: IA_Chorded → a different key (e.g. S).
  3. On the IA_Chorded mapping in IMC_Overlay, add a Chorded Action trigger and set its ChordAction to IA_Chording.
  4. In your player controller (or wherever you set up Enhanced Input), add both IMCs via the Enhanced Input local player subsystem:
  • IMC_Base at priority 1
  • IMC_Overlay at priority 100
  1. Bind a delegate (or print string) to IA_Chorded's Triggered event.
  2. PIE.

Steps

  1. Hold A (the chording-action key) and confirm IA_Chording's Triggered event fires.
  2. While still holding A, also press S (the chorded-action key).

Expected

IA_Chorded's Triggered event fires every tick while both keys are held.

Actual

IA_Chorded never fires. The chord trigger silently reports its referenced action as inactive even though IA_Chording is producing Triggered events on the same tick.

Verification: swap the priorities

Swap step 6 so IMC_Base is at priority 100 and IMC_Overlay is at priority 1. With this ordering the chord fires correctly. This confirms the bug is a function of IMC priority ordering, not a fundamental cross-IMC incompatibility.

C++ Regression Repro

Automation tests covering both orderings live at:

Engine/Plugins/EnhancedInput/Source/InputEditor/Private/Tests/InputTriggerTest.cpp

  • Input.Triggers.Chords.CrossContextLowerPriority — reproduces the bug (fails before the fix).
  • Input.Triggers.Chords.CrossContextHigherPriority — sanity-check companion (passes before and after the fix).

Run via: UE.EditorAutomation -RunTest="Input.Triggers.Chords.CrossContext".

Root Cause

IEnhancedInputSubsystemInterface::ReorderMappings (EnhancedInputSubsystemInterface.cpp) promotes chording mappings ahead of chorded mappings, but only within a single IMC. Across IMCs the merged EnhancedActionMappings list is ordered strictly by IMC priority (high → low).

When the chord trigger and the action it references live in different IMCs, with the chorded mapping in the higher-priority IMC, the chorded mapping is processed first each tick in UEnhancedPlayerInput::PrepareInputDelegatesForEvaluation. Its chord trigger queries FindActionInstanceData(ChordAction)->GetEvaluatedActionTriggerState() — but the chord action's own mapping hasn't been processed this tick yet, so the TriggerStateTracker is still in its post-tick-reset state (None, set in EnhancedPlayerInput.cpp:436 at the end of the previous tick). The chord trigger sees None and produces no event, regardless of whether the chord key is actually held.

Have Comments or More Details?

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

0
Login to Vote

Fixed
ComponentUE - Gameplay - Input
Affects Versions5.75.8
Target Fix42.00
Fix Commit54556640
CreatedMay 18, 2026
ResolvedMay 28, 2026
UpdatedJun 23, 2026
View Jira Issue