The Controller is the BP that proc’s input and is the part that is attached/detached from actors/pawns/characters when you possess them. Think of it like a physical DualShock controller (or a brainslug!) that has some logic tied to it. As you go around from actor to actor, you unplug from one and plug into another.
The character/pawn is the BP that defines what the input actually does, how it does it. It’s also the thing that holds what mesh you have, hitpoints, other stats you define; anything that represents a critter in your world. Think of it like a table-top miniature that is the critter, minus anything to control it (no brains).
The controller attaches to a pawn/character and then as the controller takes in input, it calls the corresponding events on the pawn/critter.
Everything in your game wants to use an overall set of actions in how they interact with the game world. Everyone jumps, everyone attacks, etc, etc. HOW things do what they do can differ from critter to critter. That human has a dodge-roll but the large ogre has a stumbling-sidestep. As a controlled-critter, the input is ‘to dodge’, the controller is general but the local-implementation is specific.
So there is a hierarchy of things in the game: actor → pawn → character.
An actor is something that can exist in the world. You can attach code, etc to it, but it doesn’t really accept input from a controller. It can have overlap events and respond to things, but it’s kind of a wind-up and forget type of thing; it runs on it’s own.
A pawn is an actor that can accept input from a controller, that thing that proc’s input. This could be anything insofar as a mesh, we’re talking about a class, so you can attach a sphere, a ship, etc.
Characters are pawns that can walk around as this is a specialized-use-case widely applicable to many games/scenarios.
There is a one-to-one relationship between a controller and a pawn/character in that a controller is only attached a single pawn/char at any one time. Eg: you die in deathmatch, but get to respawn. Your controller is persistent but your pawn is not.