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

遊戲 Lag 白皮書 › 只有部分人遇到的問題

物件 ID 重複使用造成誤認 Entity ID reused without a generation counter

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

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

死亡的 NPC 重新出現時,伺服器若再次使用同一個物件 ID,在這段期間漏掉消失通知的用戶端,就會把新的 NPC 誤認成舊的 NPC。

為什麼 NPC 死亡後以同一個物件 ID 重新出現 → 於是 漏掉消失通知的用戶端認為是「已知的物件」,忽略出現通知或維持死亡狀態 → 畫面上 只有一邊的畫面上沒有 NPC 或看到它倒在地上,有時還會以其他 NPC 的外觀出現

症狀
看不見/幽靈物件
因素
遺失
誰會遇到
同一台電腦只有其中一個用戶端, 只有我
何時
偶爾隨機發生, 人潮湧入時
負責單位
主要負責 遊戲開發團隊(伺服器開發) · 協同 遊戲開發團隊(用戶端開發)
遊戲開發團隊要做的事
伺服器:在物件 ID 上加上世代編號(generation),區分重複使用。用戶端:收到已知 ID 的出現通知時,刪除既有物件並重新建立。
圖表上
偶爾隨機飆高 · 收到已知 ID 出現通知的次數
查看位置
在伺服器記錄各物件 ID 的建立與刪除時間(有世代編號時一併記錄),統計用戶端以已知 ID 收到出現通知的次數,以及視野更新時被當成「沒有變化」處理的刪除與重新建立
符合的跡象
看不見或倒在地上的 NPC 的 ID 與剛死亡的 NPC 相同,且這段期間該用戶端沒收到消失通知,或伺服器消失與出現通知都沒送
不符合的跡象
ID 有世代編號、比較時也有用到的話,就不是這個原因。ID 沒有被重複使用卻仍看不見時,是出現通知遺失
確認方式
需要遊戲伺服器/用戶端的 log 與指標
深入了解
伺服器端也會發生。只以 ID 比較視野內的物件清單時,在兩次視野更新之間死亡、又以同一個 ID 重新生成的 NPC 會被當成「沒有變化」,消失與出現通知都不會送出。每個人的視野更新時間點錯開時,只有剛好碰上那一刻的用戶端會遇到。

出處

  1. Entity struct (Entities 1.3) Unity
    Entity 由 Index 與世代編號(Version)組成,用來判斷重複使用的 Index 是否仍有效
  2. NetworkConfig class (Netcode for GameObjects 2.5) Unity
    RecycleNetworkIds、NetworkIdRecycleDelay:網路 ID 閒置一段時間後才重複使用

相關原因

同一層:只有部分人遇到的問題

同一症狀(看不見/幽靈物件)在其他層的原因

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