Quick answer: Set the widget to support keyboard focus, explicitly SetKeyboardFocus, and switch the player’s input mode to UI or GameAndUI.
A custom UMG menu has a text-entry field. Typing does nothing — the widget never gets keyboard focus.
Input Mode
// C++ on the PlayerController
FInputModeUIOnly InputMode;
InputMode.SetWidgetToFocus(MyWidget->TakeWidget());
SetInputMode(InputMode);
bShowMouseCursor = true;
Or in Blueprint: Set Input Mode UI Only / Game And UI, with the widget as the focus target.
Widget Focus Support
For a UserWidget, override IsFocusable or set it in the designer (Behavior → Is Focusable = true). For raw Slate widgets, override SupportsKeyboardFocus() to return true.
Explicit SetFocus
// when the menu opens
MyEditableTextBox->SetKeyboardFocus();
Don’t assume focus lands on the right control — set it explicitly when the panel appears.
Focus Path Debugging
Console: SlateDebugger.Start then SlateDebugger.Focus. Logs every focus change with the widget path. See where focus actually goes.
GameAndUI Caveat
In GameAndUI mode, game input still flows. If your text field competes with a gameplay key bind, the gameplay action may consume it. Use UIOnly for modal text entry.
Verifying
Open the menu; the text field has focus (caret blinking). Typing enters text. Tab moves focus between fields. Escape returns to game input.
“Focus needs three things: focusable widget, explicit SetFocus, and the right input mode.”
For gamepad navigation, also wire up Navigation rules in UMG — focus moves between widgets via the d-pad, not just mouse/keyboard.