Unreal Engine

UE 网络职责划分与服务器权威化的开发记录

从多人射击原型的改造出发,记录 GameMode、GameState、PlayerState、Server RPC、Multicast 与 RepNotify 的职责边界。

  • Unreal Engine
  • 网络同步
  • Dedicated Server

先划分状态,再选择同步方式

网络问题常常不是某个 RPC 少调了一次,而是状态在一开始就没有明确所有者。多人射击原型中的弹药、当前武器、死亡状态、比分与比赛阶段分别具有不同的生命周期和可见范围,不能放进同一个同步策略里处理。

GameMode 只存在于服务器,适合放规则裁决、出生流程和比赛控制。需要所有客户端观察的比赛阶段和比分应进入 GameState。单个玩家离开 Pawn 后仍应保留的信息,更适合放在 PlayerState。角色与武器则承载与当前实体绑定的状态。

RPC 不替代状态复制

客户端的开火、换弹或拾取输入需要通过 Server RPC 进入服务器。服务器负责检查条件、修改权威状态,再让复制系统把持久结果送到相关客户端。这样即使出现丢包、重连或晚加入,也可以从当前复制状态恢复。

Multicast 适合短时表现,例如音效、动画触发或命中特效;它不应成为保存弹药数量、比赛阶段或死亡状态的唯一通道。对需要在状态变化时刷新表现的属性,RepNotify 更容易把状态与界面更新保持在同一条链路中。

当前测试边界

项目已有 Dedicated Server Target,服务器权威化改造正在覆盖射击、换弹、切枪、拾枪、死亡、复活、计分和比赛状态。两客户端实际回归测试仍待执行,因此本文只记录设计与开发边界,不把尚未验证的流程描述为已完成。

下一步测试会至少覆盖:两客户端同时操作、晚加入后的状态恢复、死亡与复活切换、比分和比赛状态一致性,以及服务器拒绝非法客户端请求的表现。