Cant understand how im supposed to handle input

Ok so im trying to create a simple character from scratch that reacts to user input by using the Character class, a custom movement component class, a input component class and a player controller. What is the proper execution order here? Should the inputs from the input component class be binded to methods in the player controller that call methods from inside the movement component? This seems way too complicated.
The documentation in this area seems very scarce and i dont really know where to look, so could anyone help me please?
Up until now ive always managed input inside pawns themselves and im trying to learn to do things the way they are meant to be done.

I have also found this inside the docs:
“Input components are processed from a stack managed by the PlayerController and processed by the PlayerInput.”
This is getting me even more confused. So the input goes from the input component then to the player controller then passed inside the playerinput object inside the player controller and only after that into the movement component?

The idea here is that you’re separating the decision making “what to do” from the actions “how to do”.

The PlayerController receives the input signals from the player by binding its methods to the input events. The PC then interprets those input signals and calls methods within a Pawn, telling the pawn what to do. The Pawn, upon receiving instructions on what to do, then performs the action.

The reason it’s compartmentalized this way, is that it allows the PlayerController to take control of (possess) different Pawns and still function the same way. E.g. a player can possess a character Pawn who is holding a gun, and press the “fire” button and the PC knows to tell the Pawn to “fire weapon” or a player can posses a tank Pawn that has a gun, press the “fire” button, and the PC knows to tell tell the tank to “fire weapon”. The way that the Pawn goes about firing the weapon, and what events/effects that action triggers, may be wildly different; but the PC doesn’t have to know about it.

Similarly, a Pawn could be controlled by a PlayerController or an AIController in the same way. The Pawn doesn’t care if it is controlled by a human player, or by an AI, or by triggered events; it just knows it was told to move in a certain direction and does so.

Player Input → Input Events → bound PlayerController methods → Pawn → MovementComponent

AI Behavior Tree → Pawn → MovementComponent

Well after messing around with binding inputs inside the player controller and the pawn in the last days i found the way i like to do it.
Im going to bind Pawn specific inputs inside the pawn itself that only get binded if the pawn is possessed by a player controller. Any global player inputs such as pressing esc to open the pause menu or other similar things will be binded inside the player controller class.
In a game where different characters have completely different control schemes and inputs it would be horrible to have the inputs bound inside the player controller as that would cause a lot of confusion with the naming of the delegates.

Whatever you think is best for your game.

If you don’t have any other questions, can you mark this as closed?