遊戲 Lag 白皮書 › 依症狀查找
看不見/幽靈物件:20 個原因與負責團隊
其他說法:NPC 不見了、隱形角色、早就死掉的怪還站著
在含圖解的完整版症狀辭典中開啟 →
應該存在的 NPC、怪物、玩家只在自己的畫面上消失,或是早已消失的物件只留在自己的畫面上。
別人在跟 NPC 對話,自己看到的卻是一片空地。只有名字沒有角色模型,或是站著一隻打了也沒反應的怪。
多半是少了某個封包,或是繪製失敗,和速度快慢關係不大。要查頻道或相位不同、出現/消失通知遺失、載入期間被丟棄、資源載入失敗。離開視野再回來後會不會出現,是最關鍵的線索。
造成這個症狀的原因
L1 用戶端遊戲程式
- 儲存裝置太慢,資源串流跟不上: 在 HDD 這類較慢的儲存裝置上,讀取開放世界貼圖與模型的速度跟不上移動,物件會晚出現,或遊戲為了等待讀取而卡頓。 (遊戲開發團隊(用戶端開發))
L8 Socket 與協定
- keepalive 預設值 2 小時: 對方沒有送出關閉訊號就消失時,TCP 要過很久才會察覺。keepalive(確認閒置連線是否仍存活的 TCP 功能)預設是關閉的,即使開啟,也要閒置 2 小時才開始確認。 (遊戲開發團隊(伺服器開發))
- 閒置後的慢啟動(slow start): 連線閒置一段時間後,TCP 會再次縮小壅塞視窗(一次能送出的量),所以突然要送大量資料時,得分成好幾次送出。 (基礎設施團隊(伺服器基礎設施))
只有部分人遇到的問題
- 頻道、實例、相位不同: 兩個角色在不同的頻道或實例(instance),或處在依任務進度決定能看到哪些 NPC 的不同「相位」時,看到的是不同的世界。 (遊戲開發團隊(伺服器開發))
- 載入中抵達的出現通知被丟棄: 一進入 zone,伺服器就送出周圍 NPC 的出現通知,但用戶端還在載入地圖,於是把通知丟掉。 (遊戲開發團隊(用戶端開發))
- 視野登錄順序錯亂: 角色登錄到視野格狀(grid)的瞬間,與 NPC 換到其他格子的瞬間重疊時,該 NPC 的出現通知可能會漏掉。 (遊戲開發團隊(伺服器開發))
- 基準快照遺失: 在伺服器只送「與上次不同的部分」的方式中,最初送一次的完整資訊(基準)遺失時,之後的變化量就無法套用。 (遊戲開發團隊(伺服器開發))
- 消失通知遺失(幽靈物件): 反過來,漏掉「已消失」的通知時,早已死亡或離開的 NPC、玩家會只留在自己的畫面上。 (遊戲開發團隊(伺服器開發))
- 剛進場時湧入的出現資訊遺失: 踏進 zone 的瞬間,伺服器會一次送出周圍數十~數百個物件的出現資訊。若用不可靠(unreliable)通道送出,或在載入中無法讀取 socket 的期間接收緩衝區溢位,就會有一部分消失且不再重送。 (遊戲開發團隊(伺服器開發))
- 物件 ID 重複使用造成誤認: 死亡的 NPC 重新出現時,伺服器若再次使用同一個物件 ID,在這段期間漏掉消失通知的用戶端,就會把新的 NPC 誤認成舊的 NPC。 (遊戲開發團隊(伺服器開發))
- 固定 UDP port 衝突: 用戶端若設計成使用固定的本機 port,同一台電腦的第二個用戶端就無法使用該 port,或與第一個用戶端分食封包。 (遊戲開發團隊(用戶端開發))
- 以 IP/裝置區分 session 的 bug: 伺服器或中介伺服器以 IP 或裝置 ID 區分連線時,會把同一台電腦(同一個公用 IP)的兩個用戶端視為同一個人。 (遊戲開發團隊(伺服器開發))
- 多開限制: 安全模組或伺服器政策限制同一台電腦開多個用戶端時,第二個用戶端會無法執行或連線,或者先開的那一個會斷線。有些遊戲只封鎖額外用戶端的功能。 (遊戲開發團隊(用戶端開發))
- 背景視窗的處理限制: 背景視窗中的用戶端,會被遊戲、引擎、OS 降低畫格數與處理量。收到的封包來不及處理,就會積壓或溢位。 (遊戲開發團隊(用戶端開發))
- 快取/資源檔案同時存取衝突: 兩個用戶端同時寫入同一個快取資料夾或鎖定檔案時,其中一邊會載入不了 NPC 模型或貼圖。 (遊戲開發團隊(用戶端開發))
- 記憶體/VRAM 不足導致串流失敗: 兩個用戶端分著用顯示記憶體時,沒有空間載入新需要的模型與貼圖,部分物件就畫不出來。 (遊戲開發團隊(用戶端開發))
- 顯示選項不同: 顯示人數上限、隱藏 NPC 名字與模型、低規格模式這類選項,在兩個用戶端設定不同時,看到的東西就不同。 (遊戲開發團隊(用戶端開發))
- 用戶端版本、資料不一致: 第二個用戶端是不同的安裝版本或尚未更新完成時,會不認得伺服器送來的新 NPC ID,直接默默忽略。 (遊戲開發團隊(用戶端開發))
- 各連線的傳送預算與優先順序: 伺服器對每條連線的傳送量設上限、從近的開始送時,上限被設得較低的那一邊,會較晚收到或收不到遠處的 NPC。 (遊戲開發團隊(伺服器開發))
- 時鐘推估誤差導致物件暫緩顯示: 用戶端推估的伺服器時間有誤時,會把剛抵達的物件資訊當成「還在未來」而暫緩,或當成「太舊」而丟棄。 (遊戲開發團隊(用戶端開發))
查看含圖解的完整版症狀辭典