游戏卡顿白皮书 › 只有部分人遇到的问题
视野注册顺序错乱 Interest-management race on enter/leave
原因 ID pt-aoi-race · 主责 研发团队·服务器开发
在含图示和实验的完整版中打开此卡片 →
角色注册到视野网格的时刻与 NPC 跨网格移动的时刻重合时,这个 NPC 的出现通知可能会漏掉。
起因 进入、换线、传送的处理与 NPC 移动在同一时刻重合 → 结果 计算“新进入视野的实体”时漏掉了这个 NPC → 画面表现 只有特定几只 NPC 看不到,或已经离开的 NPC 还留在原地
- 症状
- 隐身/幽灵实体
- 因素
- 丢包
- 谁会遇到
- 双开时只有一个客户端, 只有我
- 何时出现
- 移动中/切换地图时, 偶尔随机
- 负责方
- 主责 研发团队·服务器开发
- 研发团队要做的事
- 视野更新在一个线程里按同一顺序处理,定期把整个“可见列表”重新对齐一遍。
- 监控图上
- 偶发随机尖峰 · 服务器可见列表与客户端实体列表的差异数
- 查看位置
- 在服务器上把视野网格注册、实体跨格子移动、出现/离开通知的发送连同 tick 编号一起记录,定期对比服务器的“可见列表”与客户端持有的列表
- 确认依据
- 漏掉的 NPC 恰好在该角色进入、传送处理的同一个 tick 跨了格子,且没有针对该 NPC 的出现通知发送记录
- 排除依据
- 出现通知发了,客户端却没收到或丢弃了,是传递环节的问题(“刚进入时集中到达的出现信息丢失”“加载中到达的出现通知被丢弃”)。总是同一只 NPC 缺失,看“分线/副本/位面不同”或“显示选项不同”
- 确认手段
- 需要游戏服务器/客户端的日志和指标
出处
- Replication Graph in Unreal Engine Epic Games
MMORPG 等把世界划分为网格,每个格子维护一个 Actor 列表,以客户端所在格子为基准发送 - Actor Relevancy in Unreal Engine Epic Games
相关性按连接判断,失去相关性的 Actor 会在客户端被删除
相关原因
同一层:只有部分人遇到的问题
其他层中同样导致“隐身/幽灵实体”的原因
查看含图示和实验的原卡片