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

Game-Lag-Whitepaper › L1 Spielprozess auf dem Client

Abweichende clientseitige Vorhersage Prediction mismatch / reconciliation

Ursachen-ID cg-predict · Hauptzuständig Client-Entwicklung (Entwicklungsteam) · Beteiligt Server-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Der eigene Client zeigt die Bewegung schon vorab. Berechnet der Server sie anders, wird der eigene Charakter zurückgezogen.

Warum Client bewegt sich vor der Bestätigung durch den Server (Vorhersage) → Folge Server berechnet Kollision, Bewegungstempo oder Buffs anders oder hat den Befehl nicht erhalten → Auf dem Bildschirm Bei Eintreffen der Bestätigung wird der eigene Charakter zurückgezogen

Symptome
Rubberbanding
Faktoren
Paketverlust, Latenz
Wer ist betroffen
Nur ich
Wann
Beim Bewegen oder Zonenwechsel, Gelegentlich, zufällig
Zuständigkeit
Hauptzuständig Client-Entwicklung (Entwicklungsteam) · Beteiligt Server-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
Client: denselben Bewegungscode wie der Server verwenden, Eingaben redundant senden, Korrekturen sanft ausführen. Server: denselben Bewegungscode wie der Client verwenden, doppelt eingetroffene Eingaben anhand der Eingabenummer herausfiltern und nur einmal verarbeiten.
Größenordnungen
Die Distanz ergibt sich aus „Dauer der Abweichung × Bewegungstempo“. Schon wenige verlorene Befehle ergeben 1–3 m.
Im Graphen
Vereinzelte Spitzen ohne Muster · Anzahl der Serverkorrekturen (fehlgeschlagene Vorhersagen)
Wo nachsehen
Anzahl und Distanz der vom Server gesendeten Positionskorrekturen aufzeichnen. In Unreal die Korrekturen per ClientAdjustPosition zählen, in Unity Netcode for Entities die Zahl der Rollbacks mit Neuberechnung nach fehlgeschlagener Vorhersage
Spricht dafür
Korrekturen häufen sich zu den Zeitpunkten der Rubberbanding-Meldungen, bei bestimmten Buffs, Geländestellen oder Bewegungsskills ist die Korrekturdistanz wiederholt groß
Spricht dagegen
Korrekturen häufen sich nur bei hohem Paketverlust: Verlust von Eingabepaketen (Leitung). Keine Korrekturen, nur andere Charaktere werden sichtbar zurückgezogen: „Übermäßige Extrapolation (Dead Reckoning)“
Prüfmittel
Logs oder Metriken aus Spielserver bzw. Client nötig

Quellen

  1. Introduction to prediction (Netcode for Entities 6.5) Unity
    Client und Server sagen mit demselben Simulationscode voraus. Weicht der Serverzustand ab (fehlgeschlagene Vorhersage), wird zurückgesetzt und neu berechnet, die Korrektur ist sichtbar
  2. Use the command stream to handle user inputs (Netcode for Entities 6.5) Unity
    Gegen Paketverlust werden mit der neuesten Eingabe auch die Eingaben der vorherigen Ticks redundant mitgeschickt
  3. Understanding Networked Movement in the Character Movement Component for Unreal Engine Epic Games
    Der Client bewegt sich zuerst, der Server spielt dieselbe Bewegung nach. Weicht die Position ab, korrigiert ClientAdjustPosition sie, und die gespeicherten Bewegungen werden erneut angewendet

Verwandte Ursachen

Gleiche Schicht: L1 Spielprozess auf dem Client

Ursachen aus anderen Schichten mit demselben Symptom (Rubberbanding)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen