Thanks for the replies everyone it’s starting to make a bit more sense. So for a simple sidescrolling game, I wouldn’t need to create a custom PlayerController for any of the basic gameplay mechanics relating to my Character.
For example I want to add features like:
-Double Jump
-Wall Slide
-Wall Jump
-Crouch/Slide
-etc.
This would all be done in my inherited Character class then as my PlayerController is simply just “possessing” my Character when gameplay is happening, which at this stage of development is all that is ever happening. I hit “play” and the PlayerController possesses the “Character” pawn and then you control the character on whatever level is loaded. But if, for example, I wanted to create another level, I would need to create a new PlayerController to handle the player’s will OUTSIDE of the actual gameplay relating to the “Character” pawn (i.e. selecting which level I want to play, bringing up a menu in game to do so, navigating around the game etc.) Then when the level I want to play is loaded up, my Character is spawned and my PlayerController possesses said Character. Similarly if I had enemies in the level, they would also be spawned and AIControllers would possess them.
Let me know if I’m not understanding this correctly, I really appreciate everyone’s help.