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

Game-Lag-Whitepaper › Probleme, die nur einige betreffen

Verwechslung durch wiederverwendete Objekt-IDs Entity ID reused without a generation counter

Ursachen-ID pt-id-reuse · Hauptzuständig Server-Entwicklung (Entwicklungsteam) · Beteiligt Client-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Verwendet der Server beim Respawn eines getöteten NPCs dieselbe Objekt-ID erneut, hält ein Client, der zwischendurch die Despawn-Meldung verpasst hat, den neuen NPC fälschlich für den alten.

Warum NPC stirbt und erscheint mit derselben Objekt-ID erneut → Folge Client, der die Despawn-Meldung verpasst hat, ignoriert die Spawn-Meldung als „bereits bekanntes Objekt“ oder lässt es im toten Zustand → Auf dem Bildschirm NPC fehlt nur auf einem Bildschirm oder liegt dort am Boden, manchmal erscheint er im Aussehen eines anderen NPCs

Symptome
Unsichtbar / Geisterobjekte
Faktoren
Paketverlust
Wer ist betroffen
Nur ein Client auf demselben PC, Nur ich
Wann
Gelegentlich, zufällig, Bei großem Andrang
Zuständigkeit
Hauptzuständig Server-Entwicklung (Entwicklungsteam) · Beteiligt Client-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
Server: Objekt-IDs mit einer Generationsnummer versehen, um Wiederverwendung zu erkennen. Client: bei einer Spawn-Meldung mit bereits bekannter ID das bestehende Objekt löschen und neu erzeugen.
Im Graphen
Vereinzelte Spitzen ohne Muster · Spawn-Meldungen mit bereits bekannter ID
Wo nachsehen
Auf dem Server Erzeugungs- und Löschzeitpunkte pro Objekt-ID (mit Generationsnummer, falls vorhanden) protokollieren und zählen, wie oft der Client eine Spawn-Meldung mit bereits bekannter ID erhalten hat und wie viele Löschungen mit Neuerzeugung beim Sichtbereichs-Update als „unverändert“ behandelt wurden
Spricht dafür
Der unsichtbare oder am Boden liegende NPC hat dieselbe ID wie ein kurz zuvor gestorbener NPC, und in der Zwischenzeit hat dieser Client die Despawn-Meldung nicht erhalten oder der Server hat weder Despawn- noch Spawn-Meldung gesendet
Spricht dagegen
IDs haben eine Generationsnummer, die auch beim Vergleich verwendet wird: nicht diese Ursache. Unsichtbar ohne wiederverwendete ID: eher verlorene Spawn-Meldung
Prüfmittel
Logs oder Metriken aus Spielserver bzw. Client nötig
Mehr dazu
Das passiert auch auf Serverseite. Vergleicht der Server die Objektliste im Sichtbereich nur über IDs, wertet er einen NPC, der zwischen zwei Sichtbereichs-Updates gestorben und mit derselben ID respawnt ist, als „unverändert“ und sendet weder Despawn- noch Spawn-Meldung. Laufen die Sichtbereichs-Updates pro Spieler zeitversetzt, trifft es nur die Clients, deren Update genau in diesen Moment fällt.

Quellen

  1. Entity struct (Entities 1.3) Unity
    Ein Entity besteht aus Index und Generationsnummer (Version), so lässt sich unterscheiden, ob ein wiederverwendeter Index noch gültig ist
  2. NetworkConfig class (Netcode for GameObjects 2.5) Unity
    RecycleNetworkIds, NetworkIdRecycleDelay: Netzwerk-IDs werden erst nach einer Wartezeit wiederverwendet

Verwandte Ursachen

Gleiche Schicht: Probleme, die nur einige betreffen

Ursachen aus anderen Schichten mit demselben Symptom (Unsichtbar / Geisterobjekte)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen