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.