游戏卡顿白皮书 › 只有部分人遇到的问题
怪物控制权在慢的客户端上 Monster movement delegated to a player client
原因 ID pt-mob-control · 主责 研发团队·服务器开发
在含图示和实验的完整版中打开此卡片 →
有的游戏为减轻服务器负载,把怪物的移动计算交给附近某个玩家的客户端。这个人的线路差时,这只怪物在所有人的画面上都会动得很怪。
起因 服务器把怪物的移动计算交给最近(或最先到)的玩家的客户端 → 结果 负责的人上报结果晚到或扎堆到达服务器 → 画面表现 只有这只怪物在周围所有人的画面上顿一下然后瞬移。负责的人自己的画面上正常
- 症状
- 瞬移, 一卡一卡, 快进
- 因素
- 抖动, 丢包
- 谁会遇到
- 只有某个角色看起来异常, 特定地点/分线
- 何时出现
- 一直, 偶尔随机
- 负责方
- 主责 研发团队·服务器开发
- 研发团队要做的事
- 把控制权交给线路好的人(按 ping、丢包),上报中断时服务器立即收回,BOSS 这类重要怪物由服务器直接计算。
- 监控图上
- 仅部分偏高 · 各怪物的位置上报间隔(按持有控制权的客户端)
- 查看位置
- 在服务器上为每只怪物记录持有控制权的客户端,以及该客户端的上报间隔、RTT、丢包。也可以在服务器侧抓包,看该客户端所发包的到达间隔
- 确认依据
- 动得怪的怪物控制权都在同一个人手里,此人上报间隔忽长忽短或中断,把控制权交给别人后立即恢复正常
- 排除依据
- 服务器直接计算的怪物也同样跳,是服务器 tick 延迟或观看者一侧的线路问题。换了控制权仍然跳,看“指令同步的路径计算不一致”
- 确认手段
- 需要游戏服务器/客户端的日志和指标
- 深入了解
- 负责的人自己觉得一切正常,所以反馈只会是“怪物不对劲”。除了一个人以外所有人都看到同一只怪物动得怪,就先确认这只怪物的控制权在谁手里。
出处
- Authority (Netcode for GameObjects 2.5) Unity
分布式权威模型中,每个游戏实例(客户端)负责一部分网络实体的权威,并计算这些实体 - Distributed authority topologies (Netcode for GameObjects 2.5) Unity
权威分散到客户端时,就没有单一模拟,也容易被作弊
相关原因
同一层:只有部分人遇到的问题
其他层中同样导致“瞬移”的原因
查看含图示和实验的原卡片