游戏卡顿白皮书 › 只有部分人遇到的问题
时钟估算误差导致实体被搁置 Clock estimate error holds or discards entities
原因 ID pt-clock-hold · 主责 研发团队·客户端开发
在含图示和实验的完整版中打开此卡片 →
客户端估算的服务器时间不准时,刚到达的实体信息会被当成“还在未来”而搁置,或被当成“太旧”而丢弃。
起因 某一个客户端对服务器时间的估算偏差很大(在加载中测量、从省电状态恢复) → 结果 插值基准时间与实体信息的时间对不上 → 画面表现 实体出现得晚,或看起来停在原地不动
- 症状
- 隐身/幽灵实体, 一卡一卡
- 因素
- 延迟
- 谁会遇到
- 双开时只有一个客户端
- 何时出现
- 挂机一段时间后, 刚登录/维护结束后
- 负责方
- 主责 研发团队·客户端开发
- 研发团队要做的事
- 定期重新做时间同步,偏差大时立即重置,不使用加载中或刚从省电状态恢复时测得的值。
- 监控图上
- 仅部分偏高 · 各客户端的服务器时间估算误差
- 查看位置
- 在客户端记录估算的服务器时间、RTT、重新做时间同步的时刻,以及搁置或丢弃实体信息的次数。在刚加载完或刚从省电状态恢复时尝试复现
- 确认依据
- 只有出问题的客户端估算误差超过重置阈值(Unity 为 hardResetThresholdSec,默认 0.2 秒),有把实体信息当成未来而搁置、或当成过去而丢弃的记录,重新做时间同步后立即恢复正常
- 排除依据
- 估算误差很小却出现得晚,看“按连接分配的发送预算/优先级”或加载方面的原因
- 确认手段
- 需要游戏服务器/客户端的日志和指标
出处
- NetworkTimeSystem class (Netcode for GameObjects 2.5) Unity
时间差超过 hardResetThresholdSec(默认 0.2 秒)时强制对齐,平时用 adjustmentRatio 一点点调快或调慢 - NetworkTime and ticks (Netcode for GameObjects 2.5) Unity
LocalTime 领先于服务器,ServerTime 落后于服务器。晚到的消息等待时间可能为负数
相关原因
同一层:只有部分人遇到的问题
其他层中同样导致“隐身/幽灵实体”的原因
查看含图示和实验的原卡片