In my example, the code to move each pawn would be on each pawn’s BP. The controller is the only place where input action\axis events appear, so that all of them are processed in the same place. The controller takes the input and calls events like “PawnMoveForward” or “Jump” on whatever pawn it’s controlling at the time. The pawn class decides what to do in response. That way it can handle move (e.g., Add Movement Input) or turn or jumps however it wants or choose to ignore some commands. If it just “listens” for events like that, it doesn’t need to know what controller class it controlling it, so it doesn’t need to “detect” a controller change or anything.
Player indexes is not just for split screen. In a MP game the player may be the only one locally, but the server (and therefore the game) needs to keep track of all players. So obviously player indexes are important 