遊戲 Lag 白皮書 › 只有部分人遇到的問題
一到就處理的伺服器造成快轉 Event-driven processing of bursty inputs
原因 ID pt-event-server · 主要負責 遊戲開發團隊(伺服器開發) · 協同 遊戲開發團隊(用戶端開發)
在含圖解與實驗的完整版中開啟卡片 →
封包一抵達就立即處理並通知的伺服器,會把慢的人成批湧入的動作接連立即執行。
為什麼 慢的人的技能、移動請求成批抵達 → 於是 伺服器一收到就依序執行,並立即通知所有人 → 畫面上 在其他人眼中,那個人在一瞬間放出好幾個技能,或像快轉一樣移動
- 症狀
- 快轉
- 因素
- 抖動
- 誰會遇到
- 只有特定角色看起來怪怪的
- 何時
- 做特定動作時, 一直都有
- 負責單位
- 主要負責 遊戲開發團隊(伺服器開發) · 協同 遊戲開發團隊(用戶端開發)
- 遊戲開發團隊要做的事
- 伺服器:依動作附帶的輸入時間間隔執行(時間只在容許範圍內才採信),或把成批湧入的動作按最小間隔(公共冷卻)錯開依序執行,不要直接拒絕;不要只看抵達時間做冷卻檢查(正常輸入會被吃掉)。用戶端:在動作上附上輸入時間再送出。
- 圖表上
- 只有部分偏高 · 各玩家的動作執行間隔
- 查看位置
- 在伺服器 log 記錄各玩家動作的抵達時間、執行時間、用戶端附上的輸入時間(若有),比較執行間隔與輸入間隔。同時在伺服器端封包擷取中查看該玩家封包的抵達間隔
- 符合的跡象
- 輸入間隔正常,伺服器的抵達與執行間隔卻擠在幾 ms 內,且擠在一起的時刻與其他人回報快轉的時間重疊
- 不符合的跡象
- 輸入時間的間隔本身就擠在一起時,是用戶端或巨集的問題。伺服器執行間隔均勻、只有在別人畫面上看起來擠在一起時,是觀看者的線路
- 確認方式
- 需要遊戲伺服器/用戶端的 log 與指標
出處
- Understanding Networked Movement in the Character Movement Component for Unreal Engine Epic Games
伺服器每收到一次 ServerMove 就計算移動,並以與前一次移動的時間戳記差決定時間間隔。與伺服器時間差太多時就丟棄該次移動 - Deterministic Lockstep Gaffer On Games
輸入一到就套用的話,即使以 60Hz 送出,間隔也不平均,結果忽快忽慢
相關原因
同一層:只有部分人遇到的問題
同一症狀(快轉)在其他層的原因
查看含圖解與實驗的完整版卡片