遊戲 Lag 白皮書 › 只有部分人遇到的問題
怪物控制權在慢速用戶端上 Monster movement delegated to a player client
原因 ID pt-mob-control · 主要負責 遊戲開發團隊(伺服器開發)
在含圖解與實驗的完整版中開啟卡片 →
有些遊戲為了減輕伺服器負載,把怪物移動的計算交給附近某位玩家的用戶端。那個人線路差時,該怪物在所有人的畫面上都會動得很怪。
為什麼 伺服器把怪物移動計算交給最近(或最先到)的玩家用戶端 → 於是 負責者的結果回報延遲,或成批抵達伺服器 → 畫面上 只有那隻怪物在周圍所有人畫面上頓一下後瞬移。負責者本人的畫面上卻正常
- 症狀
- 瞬移, 卡頓, 快轉
- 因素
- 抖動, 遺失
- 誰會遇到
- 只有特定角色看起來怪怪的, 特定地點/頻道
- 何時
- 一直都有, 偶爾隨機發生
- 負責單位
- 主要負責 遊戲開發團隊(伺服器開發)
- 遊戲開發團隊要做的事
- 把控制權交給線路好的人(以 ping、封包遺失為標準),回報中斷時由伺服器立即收回,王這類重要怪物由伺服器自行計算。
- 圖表上
- 只有部分偏高 · 各怪物的位置回報間隔(依擁有控制權的用戶端)
- 查看位置
- 在伺服器上為每隻怪物記錄擁有控制權的用戶端,以及該用戶端的回報間隔、RTT、封包遺失。也可以從伺服器端封包擷取查看該用戶端送出封包的抵達間隔
- 符合的跡象
- 動作異常的怪物,控制權全都在同一個人手上,該玩家的回報間隔忽長忽短或中斷,把控制權交給別人後立即恢復正常
- 不符合的跡象
- 伺服器自行計算的怪物也一樣亂跳時,是伺服器 tick 延遲或觀看者那端的線路。轉移控制權後仍持續亂跳時,是指令同步的路徑計算不一致
- 確認方式
- 需要遊戲伺服器/用戶端的 log 與指標
- 深入了解
- 負責的人自己覺得一切正常,所以回報只會是「怪物怪怪的」。如果除了一個人之外,所有人都看到同一隻怪物動作異常,要先確認那隻怪物的控制權在誰手上。
出處
- Authority (Netcode for GameObjects 2.5) Unity
在分散式權限模型中,每個遊戲實例(用戶端)負責一部分網路物件的權限,並計算那些物件 - Distributed authority topologies (Netcode for GameObjects 2.5) Unity
權限分散到用戶端時就沒有單一模擬,容易被作弊
相關原因
同一層:只有部分人遇到的問題
同一症狀(瞬移)在其他層的原因
查看含圖解與實驗的完整版卡片