游戏卡顿白皮书 › 同步设计
技能不支持预输入 No input/spell queue
原因 ID sy-no-queue · 主责 研发团队·客户端开发 · 配合 研发团队·服务器开发
在含图示和实验的完整版中打开此卡片 →
必须等服务器确认上一个技能结束后才能按下一个技能时,每次衔接中间都会插入一段往返时间。
起因 只有在“上一个技能确认后”才接受下一个技能的输入 → 结果 每两个技能之间都空出一段与 ping 相当的时间 → 画面表现 每次衔接之间都出现空当,ping 越高 DPS 越低
- 症状
- 操作延迟, 吞操作/回档
- 因素
- 延迟
- 谁会遇到
- 只有我, 仅特定功能
- 何时出现
- 做特定操作时
- 负责方
- 主责 研发团队·客户端开发 · 配合 研发团队·服务器开发
- 研发团队要做的事
- 客户端:预输入时间窗,冷却结束前一段时间(例如 0.3~0.4 秒)内的输入也接受,并立即发给服务器。服务器:稍早到达的输入不要拒绝,在冷却结束的那一刻执行。
- 数值参考
- 冷却 1 秒的技能衔接中,ping 150 ms 时每两个技能之间至少空出 0.15 秒,同样时间内放出的技能减少 13% 以上。
- 监控图上
- 一直偏高 · 技能之间的空当,RTT(ping)
- 查看位置
- 在服务器日志中按角色记录技能冷却结束时刻、下一个技能请求到达时刻、执行时刻,把其间的空当与玩家 RTT 对比
- 确认依据
- 从冷却结束到下一个技能执行之间总是空着大约一个 RTT,ping 越高的玩家空当越长,同样时间内用出的技能越少
- 排除依据
- 空当与 ping 无关、保持固定,是公共冷却或动画时长的设计。空当只是偶尔猛然变大,看抖动、丢包或 tick 超出预算
- 确认手段
- 需要游戏服务器/客户端的日志和指标
- 深入了解
- 例如《魔兽世界》设有预输入时间窗,并允许玩家在设置中调整。时间窗比往返时间长时,衔接之间几乎感觉不到 ping。
出处
- Latency and Player Actions in Online Games (Communications of the ACM, 2006) ACM
《EverQuest 2》中延迟越大,角色造成的伤害越低,战斗时间越长(0→500 ms 时,约 2 分钟的战斗多出 5 秒)
相关原因
同一层:同步设计
其他层中同样导致“操作延迟”的原因
查看含图示和实验的原卡片