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
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
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