A PlayerController gets created locally when launching a game and only exists on the client. The GameMode is what assigns the player controller to a pawn, it is where you put your spawning script as well. The PlayerController blueprint can be completely blank, it is by default. It is the interface for a client to send input to the game using the UObject PlayerInput that is coded in the PlayerController class.
Your playercontroller doesn’t jump, PlayerInput takes in the keystroke. When you hit Spacebar, the keystroke goes through the stack until it finds an InputAction using Spacebar. Input Jump is on the character blueprint, if you put it there.
This is from the Wiki Input | Unreal Engine Documentation
InputComponent
InputComponents are most commonly present in Pawns and Controllers, although they can be set in other Actors and Level Scripts if desired. The InputComponent links the AxisMappings and ActionMappings in your project to game actions, usually functions, set up either in C++ code or Blueprint graphs.
The priority stack for input handling by InputComponents is as follows (highest priority first):
- The Actor with the most-recently enabled “Accepts input” - this can be anything from a door to a pickup item. Even though this is the top of the stack it only really applies if you trigger input enabled on an overlap event for example
- Controller
- Level Script
- Pawn
If one InputComponent takes the input, it is not available further down the stack. This functionally can be bypassed by setting the “Consume Input” boolean to false on the input action
Input Processing Procedure
So if your PlayerController doesn’t have anything using Spacebar, it goes to the level blueprint and checks, if it isn’t in the level blueprint it goes to the controlled pawn. This is why you don’t want menu inputs on a pawn because if you aren’t possessing it you can’t bring up the menu (UNLESS it is a menu that you only want possible when the player is possessing that pawn), this is also why you don’t need anything that only a character does on your PlayerController