多人游戏的输入隔离

本地多人(分屏)时"两个手柄各操作各的角色"。

两个机制

机制 作用
PlayerController 一人一个 每个 Controller 有独立 InputComponent
IMC 按玩家隔离 每个玩家的 LocalPlayer 子系统独立

每个玩家自己的 PlayerController::SetupInputComponent 里绑定自己的 IA——框架自动隔离,不用担心串。

分屏的物理限制

UE 的分屏(Split Screen)自动处理 viewport 分配,每个玩家看自己的视角。手柄键天然带"哪个手柄"的信息:FKey 带 PlayerIndex(Gamepad1 / Gamepad2 …)。

常见坑

症状 原因
P1 按键动了 P2 的角色 两个 Controller 共用了一个 InputComponent,Possess 错了 Pawn
IMC 只对 P1 生效 代码里用了 "GetPlayerController(0)",只加给了 P1

正确做法:每个 Controller 自己加自己的 IMC(在 Controller 的 BeginPlay 里用 GetLocalPlayer(),天然是自己的)。

网络多人( Dedicated Server)

服务器没有 LocalPlayer/输入——客户端把输入结果通过 RPC/复制上传: - 移动用引擎内置的 CharacterMovementComponent 复制; - 其他操作用 GA(GAS)或自定义 Server RPC。

Enhanced Input 的代码全在客户端,服务器不参与 IMC——这就是为什么"输入逻辑天然是本地的"(第 3 章的 IMC 管理 API 都在 LocalPlayer 子系统上)。

本章小结

  • 本地多人:每 PlayerController 独立绑定 + IMC,框架自动隔离。
  • 分屏由引擎处理;手柄键天然带 PlayerIndex。
  • 网络多人:输入在客户端,结果走 RPC/复制上传。