The registration step everyone forgets, and where to put it.
On the PlayerController's BeginPlay, or a Pawn's On Possessed, call:
Get Enhanced Input Local Player Subsystem → Add Mapping Context
The subsystem here is a ULocalPlayerSubsystem — see Chapter 14 for why it's reachable from anywhere without a stored pointer.
On Possessed rather than BeginPlay is the more reliable place to add the mapping context on a Pawn, since possession order matters — a pawn's BeginPlay can run before a controller has possessed it.Enable Input and Auto Receive Input configuration.