ステータスの異なるPawnをPlayerControllerで切り替えて動かすのに良い方法

移動速度やハンドリング等の性能が違うPawnをPlayerControllerで切り替えて動かすのに最も良い方法が知りたいです。特にPawn-PlayerController間でステータスの変数をやり取りする方法に悩んでおり、どれが良いのか判別がつきません。Pawnの性能はカスタマイズ可能で、AIにも流用できるようにしたいです。
1.Pawnの変数をPlayerControllerに渡してPlayerControllerで移動処理を行う
2.PlayerControllerの入力情報をPawnに渡してPawnで移動処理を行う
3.PlayerControllerは移動に使わず入力も処理も全てPawn上で済ませる
4.Pawnの情報を別の場所(データテーブル等)に保管してPlayerController上で呼び出して使う
他にも良い方法があるかもしれませんが、自分が思いつくのは上記の4つです。どの方法が良いと思いますか?

設計の話に絶対は無いので個人の意見である、というのは念頭においてください

UnrealEngineの基本設計(GameplayFramework)に従うと、3になります

Pawnに対してController(PlayerController/AIController)をPossessする構造を意識することで、Pawnを「付け替え」できるようになります
付け替えが可能なようにするには、ControllerはPawnが何であっても問題ないように(依存関係を持たないように)する必要があります
そういう意味で言うと、4は不適切です
また、もともとPlayerControllerに入力をPawnに送る機能があるため、1と2は余計な実装になります

つまりPlayerControllerは複雑なことは何もせず、とりあえずあればいいという事で良いのでしょうか?ControllerというからにはPawnを操作するために共通の操作系統を組んでおけば色々楽になる…というものだと思っていました。
確かに依存関係が出来てしまうと付け替えが複雑になってしまいますね。

僕の場合はPlayerControllerには操作するPawnの状態に関係なく必要なもの…特にUI関連を持たせる設計にしています
これらは逆にPawnに持たせるべきではないからです
(PawnはAIも使うが、AIにはUIが必要ない)

いずれにしろ、PawnはController関係なく単独で動作できるような状態にしておけば、動作テストがしやすくなったり、別のプロトタイピングを試すのが容易になったりなど、取り回しがよくなります