Quick answer: Removing a UMG menu doesn’t restore gameplay input? SetInputModeUIOnly persists until explicitly reset. Call SetInputModeGameOnly when the widget closes.
Closing the pause menu leaves the player unable to look around. The menu set UI-only input mode and never cleared it.
Pair Input Modes
// Open menu
MenuWidget->AddToViewport();
PC->SetInputModeUIOnly();
PC->bShowMouseCursor = true;
// Close menu
MenuWidget->RemoveFromParent();
PC->SetInputModeGameOnly();
PC->bShowMouseCursor = false;Every open call needs a matching close.
UI Stack Pattern
For nested menus, maintain a stack. Push input mode on open; pop on close. Top of stack drives the active input mode.
Game-And-UI Mode
SetInputModeGameAndUI for HUDs that need both. Avoids the toggle for non-pausing overlays.
OnRemoved Hook
Override the widget’s NativeDestruct or use the BP Event Destruct. Reset input mode there as a safety net.
Verifying
Closing menus restores expected input mode and cursor visibility. No frozen-camera states after menus.
“Input mode is sticky. Pair every UIOnly with a GameOnly on close.”
Centralize input mode logic in a tiny UI service — widget code calls service.Push() / service.Pop() and never directly touches input mode.