游戏卡顿白皮书 › 只有部分人遇到的问题
加载中到达的出现通知被丢弃 Spawn messages dropped before the client is ready
原因 ID pt-loading-drop · 主责 研发团队·客户端开发 · 配合 研发团队·服务器开发
在含图示和实验的完整版中打开此卡片 →
刚进入场景,服务器就发来周围 NPC 的出现通知,而客户端还在加载地图,就把这些通知丢掉了。
起因 服务器在完成进入处理后立即发送周围实体的出现通知 → 结果 客户端正在加载,消息处理函数还没注册,于是丢弃通知 → 画面表现 服务器认为已经发过了,不会再发。在离开视野再回来之前,NPC 一直看不到
- 症状
- 隐身/幽灵实体
- 因素
- 丢包
- 谁会遇到
- 双开时只有一个客户端, 只有我
- 何时出现
- 刚登录/维护结束后, 移动中/切换地图时
- 负责方
- 主责 研发团队·客户端开发 · 配合 研发团队·服务器开发
- 研发团队要做的事
- 客户端:加载完成后发送“准备就绪”,或者把加载中收到的包先存起来再处理。服务器:收到“准备就绪”后再发送周围信息。
- 数值参考
- 同一台电脑上两个客户端同时加载,或者正在加载的一方是后台窗口时,CPU 和磁盘被分摊,处理也受限,这一方的加载可能慢上好几倍。服务器的进入处理变快后,同样的 bug 也会暴露出来。
- 监控图上
- 仅部分偏高 · 各客户端加载时间,加载中丢弃的消息数
- 查看位置
- 把客户端在加载中收到并丢弃的消息数量、类型以及加载完成时刻,与服务器发送出现通知的时刻对比。在同一台电脑上同时加载两个客户端,或把正在加载的一方放到后台窗口,容易复现
- 确认依据
- 看不到的 NPC,服务器发过出现通知,到达时刻在加载完成之前,那段时间丢弃的消息数增加。只发生在加载较慢的那个客户端上
- 排除依据
- 出现通知在加载完成后才到达却仍看不到,看“基准快照丢失”或“实体 ID 重用混淆”。服务器根本没发送这个 NPC 的通知,看“视野注册顺序错乱”或“分线/副本/位面不同”
- 确认手段
- 需要游戏服务器/客户端的日志和指标
出处
- NetworkConfig class (Netcode for GameObjects 2.5) Unity
SpawnTimeout:尚未生成的实体的消息先暂存,在时限内仍未生成就丢弃 - Actor Relevancy in Unreal Engine Epic Games
失去相关性的 Actor 会在客户端被删除,重新变得相关时再重新复制
相关原因
同一层:只有部分人遇到的问题
其他层中同样导致“隐身/幽灵实体”的原因
查看含图示和实验的原卡片