游戏卡顿白皮书 › 同步设计
客户端权威 Client-authoritative results
原因 ID sy-client-auth · 主责 研发团队·服务器开发 · 配合 研发团队·客户端开发
在含图示和实验的完整版中打开此卡片 →
各自决定自己的结果,自己的画面很流畅,但结果会与别人的画面对不上,也容易被外挂利用。
起因 位置、命中由客户端决定,服务器只负责转发 → 结果 两个人都说自己先打中了对方,服务器无法验证 → 画面表现 对手瞬移、穿墙,“我打中了却没算”
- 症状
- 瞬移, 吞操作/回档
- 因素
- 延迟
- 谁会遇到
- 全服
- 何时出现
- 一直
- 负责方
- 主责 研发团队·服务器开发 · 配合 研发团队·客户端开发
- 研发团队要做的事
- 服务器:重要结果(命中等)由服务器自己校验,移动做速度和距离检查。客户端:收到服务器拒绝或校正的结果后,回退到该值。
- 监控图上
- 一直偏高 · 不可能的移动速度、互相矛盾的命中报告数
- 查看位置
- 在服务器上原样记录客户端报告的位置和命中,用连续的位置报告计算移动速度,统计超过最大速度的报告,以及两人互称先打中对方的报告
- 确认依据
- 服务器不加校验就把报告转发给其他客户端,不可能的速度或互相矛盾的命中报告与版本更新、地区无关,持续出现
- 排除依据
- 服务器自己计算或校验结果时,就不是这个原因。这时的瞬移看丢包或插值缓冲
- 确认手段
- 需要游戏服务器/客户端的日志和指标
出处
- Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
由客户端报告结果的方式,只有在能信任客户端时才可行。因为担心外挂,才设置权威服务器 - Peeking into VALORANT's Netcode Riot Games
服务器权威模型:服务器从不信任客户端看到的游戏状态 - Distributed authority topologies (Netcode for GameObjects 2.5) Unity
把权限分给客户端,作弊会变得容易,也不再有统管所有实体的单一模拟
相关原因
同一层:同步设计
其他层中同样导致“瞬移”的原因
查看含图示和实验的原卡片