Change PlayerController dynamically

without any coupling, your software would not be able to do anything. you need classes to at least loosely couple in most cases, but when you have something as central as the player controller, its fine to have a lot of other classes relying on the existence of a player controller in order to function. player controllers are not optional in UE4, they are a very important piece of the framework.

loosely coupling an object with several other pieces of code is not a problem, as long as editing one doesn’t make you also have to edit the other. you really shouldn’t follow one size fits all OOP rules for designing every class, that stuff is for beginners to learn the principles of oop, but in practice, some classes need far more coupling than others, and if designed properly, that should not be a problem.

do you truly believe that only 1 other object should have a reference to a player controller?