Skip to content

Desktop mouse navigation for the experimental UE menu

The engine-side, asset-light Canvas menu now offers six mouse targets when the menu is open in a sufficiently wide desktop viewport:

Button Existing action
PREV PAGE Navigate to the previous menu category
NEXT PAGE Navigate to the next menu category
DETAIL UP Scroll back through this page's details
DETAIL DOWN Scroll forward through this page's details
SELECT Invoke the existing GameMode menu action
CLOSE Close the menu and explicitly return to driving

The mouse dock is never presented on Android or when a menu is closed. Compact desktop windows continue using the keyboard/gamepad actions already supported. The desktop menu is not a completed UMG/Slate system.

Authority and input safety

The existing GameMode remains solely responsible for event starts, garage purchases, credit awards, restart, save and race pause transitions. The new pawn input handler only accepts mouse clicks from a locally controlled pawn while the menu is open and refuses out-of-bounds, invalid coordinates and any click outside the six buttons. It clears held driving commands before routing an accepted click to a pre-existing menu method. Mouse UI does not introduce a second gameplay progression path.

The GameMode toggles cursor visibility and game/UI input mode when the menu opens/closes. The same shared, portable pixel geometry drives both Canvas button drawing and mouse hit-testing, with real Canvas dimensions. Text-fitting reserves the right-side menu dock so long menu descriptions cannot overwrite buttons.

Source validation

python -m unittest discover -s Tests/Editor -p '*Tests.py'
cmake -S Tests/Standalone -B build/test
cmake --build build/test --parallel
ctest --test-dir build/test --output-on-failure

Relevant tests: HudMenuMouseControls, DesktopMenuMouseBindingTests, and UnrealInputMappingIntegrityTests. They cover 720p, 1080p and ultrawide layouts, resize sweeps, invalid coordinates and disabled states. The dedicated input-mapping integrity check parses each individual +ActionMappings / +AxisMappings entry, rejects concatenated config lines, and checks the real pawn's input action names against the configured keys. In particular, Enter and LeftMouseButton must be separate records; a plain text substring search was insufficient to detect this config regression.

Required genuine Unreal/Windows checks

  • Compile UHT and the actual UE 5.8 LatebrakeEditor/Game targets.
  • Verify Enter selects menu entries and the left mouse button independently activates all six menu targets. These previously shared a malformed INI line, and source parsing cannot prove actual engine input registration.
  • Open TAB menu, test all six buttons with real desktop mouse, trackpad and DPI/scaling settings at 1280x720, 1920x1080 and ultrawide.
  • Test open-close after starting/restarting an event; confirm the cursor is hidden again and no throttle/steering input remains latched.
  • Verify keyboard, gamepad, mouse and Android input still function, including pause and alt-tab/focus-loss recovery.
  • Check save errors, results pagination and menu detail clipping against every mouse button and Android action region.
  • Profile Canvas text measurement and input latency on a real installed build. Source-only tests cannot prove touch or device behavior.

See production UI milestone and genuine playable release gate.