한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

遊戲 Lag 白皮書 › 同步設計

沒有時間戳記、一到就播放 Events played on arrival (no timestamps)

原因 ID sy-no-timestamp · 主要負責 遊戲開發團隊(用戶端開發) · 協同 遊戲開發團隊(伺服器開發)

在含圖解與實驗的完整版中開啟卡片 →

伺服器事件沒有附上發生時間、一收到就播放時,網路抖動會讓演出時機跟著忽快忽慢。

為什麼 「開始攻擊」、「播放特效」事件一抵達就執行 → 於是 每個封包的抵達時間不同,間隔忽長忽短 → 畫面上 連續攻擊動作忽快忽慢,王的招式時機每次都不一樣

症狀
卡頓, 快轉
因素
抖動
誰會遇到
只有我
何時
一直都有
負責單位
主要負責 遊戲開發團隊(用戶端開發) · 協同 遊戲開發團隊(伺服器開發)
遊戲開發團隊要做的事
用戶端:依事件附帶的時間播放(事件排程、內插緩衝)。伺服器:在事件上附上發生時間(伺服器時間)再送出。
圖表上
偶爾隨機飆高 · 事件播放間隔、封包抵達間隔
查看位置
用事件編號對齊伺服器 log 的事件發生時間與用戶端 log 的抵達、播放時間,比較間隔。在開發版本加入抖動(tc netem 的抖動值、Unreal 網路模擬的最小/最大延遲)來重現
符合的跡象
伺服器上的發生間隔固定,播放間隔卻完全跟著抵達間隔忽長忽短
不符合的跡象
抵達間隔均勻、播放卻忽快忽慢時,是用戶端畫格的問題(畫格時間尖峰)。伺服器的發生間隔本身就不穩時,是超出 tick 預算
確認方式
需要遊戲伺服器/用戶端的 log 與指標

出處

  1. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
    每個更新都附上伺服器時間,以目前時間減去內插時間(100ms)的目標時間點位置來繪製
  2. Snapshot Interpolation Gaffer On Games
    收到快照就直接繪製會因抖動而斷斷續續,先在內插緩衝稍微累積再繪製就會很流暢
  3. NetworkTime and ticks (Netcode for GameObjects 2.5) Unity
    在 RPC 中放入送出時間,讓接收端依伺服器時間播放效果的範例
  4. tc-netem(8) — Linux manual page iproute2
    對送出的封包加入延遲、抖動(delay TIME JITTER)與遺失(loss random PERCENT),模擬真實網路的測試工具
  5. Using Network Emulation in Unreal Engine Epic Games
    在伺服器、用戶端加入最小/最大延遲與封包遺失比例來測試,在主控台以 NetEmulation.PktLag 這類指令設定

相關原因

同一層:同步設計

同一症狀(卡頓)在其他層的原因

查看含圖解與實驗的完整版卡片