遊戲 Lag 白皮書 › 同步設計
沒有技能預輸入 No input/spell queue
原因 ID sy-no-queue · 主要負責 遊戲開發團隊(用戶端開發) · 協同 遊戲開發團隊(伺服器開發)
在含圖解與實驗的完整版中開啟卡片 →
必須收到伺服器確認前一個技能已結束才能按下一個技能時,每次連段之間都會夾著一段往返時間。
為什麼 只在「前一個技能確定後」才接受下一個技能的輸入 → 於是 每個技能之間都空出一段 ping 長度的時間 → 畫面上 連段之間出現空檔,ping 越高 DPS 越低
- 症狀
- 輸入延遲, 吃指令/回檔
- 因素
- 延遲
- 誰會遇到
- 只有我, 只有特定功能
- 何時
- 做特定動作時
- 負責單位
- 主要負責 遊戲開發團隊(用戶端開發) · 協同 遊戲開發團隊(伺服器開發)
- 遊戲開發團隊要做的事
- 用戶端:設定預輸入容許時間,冷卻結束前一段時間(例:0.3~0.4 秒)內的輸入也接受並立即送給伺服器。伺服器:稍微提早抵達的輸入不要拒絕,在冷卻結束的瞬間執行。
- 數值參考
- 冷卻 1 秒的連段在 ping 150ms 時,每個技能之間會空出 0.15 秒以上,同樣時間內施放的技能數減少超過 13%。
- 圖表上
- 一開始就一直偏高 · 技能之間的空檔、RTT(ping)
- 查看位置
- 在伺服器 log 中依角色記錄技能冷卻結束時間、下一個技能請求抵達時間與執行時間,把中間的空檔與玩家 RTT 比較
- 符合的跡象
- 從冷卻結束到下一個技能執行之間總是空出約 RTT 的時間,ping 越高的玩家空檔越長、同樣時間內施放的技能越少
- 不符合的跡象
- 空檔與 ping 無關、固定不變時,是公共冷卻或動畫長度的設計。空檔只是偶爾大幅飆高時,要查抖動、封包遺失或超出 tick 預算
- 確認方式
- 需要遊戲伺服器/用戶端的 log 與指標
- 深入了解
- 例如《魔獸世界》設有預輸入容許時間,並讓玩家可以在設定中調整。容許時間比往返時間長的話,連段之間就幾乎不會再夾著 ping 的等待。
出處
- Latency and Player Actions in Online Games (Communications of the ACM, 2006) ACM
在《EverQuest 2》中,延遲越大,角色造成的傷害越少,戰鬥拖得越長(0→500ms 時約 2 分鐘的戰鬥多出 5 秒)
相關原因
同一層:同步設計
同一症狀(輸入延遲)在其他層的原因
查看含圖解與實驗的完整版卡片