Nach einem Tastendruck gibt es weder Animation noch Ton, bis die Antwort des Servers eintrifft. Der Ping bestimmt direkt die Reaktionszeit.
Warum Skills, Bewegung und Aufheben erst nach Bestätigung durch den Server abgespielt → Folge Ab dem Tastendruck keinerlei Reaktion für die Dauer von Round Trip + Tick-Wartezeit → Auf dem Bildschirm Bei 150 ms Ping wirkt jede Aktion um 0,2 s träge
Client: Animation, Ton und Effekte sofort beim Tastendruck starten (clientseitiges Feedback), nur Ergebnisse (Schaden, Belohnungen) nach Bestätigung durch den Server anzeigen, Bewegung und Standardangriffe vorhersagen und sofort umsetzen, nach einer Positionskorrektur des Servers die noch unbestätigten Eingaben ab dieser Position erneut anwenden. Server: Bewegung aus den empfangenen Eingaben selbst berechnen und Korrekturwerte nur senden, wenn die Abweichung von der vom Client vorhergesagten Position einen Schwellenwert überschreitet.
Größenordnungen
Reaktionszeit ≈ Ping + halbes Tick-Intervall + ein Frame. Bei 20 Ticks pro Sekunde und 150 ms Ping etwa 190 ms.
Im Graphen
Von Anfang an dauerhaft hoch · Zeit von der Eingabe bis zum Start des Feedbacks, RTT (Ping)
Wo nachsehen
Im Client-Log eines Entwicklungs-Builds Zeitpunkt des Tastendrucks, Start der ersten Animation bzw. des ersten Tons und Ankunft der Serverantwort protokollieren und neben die RTT im Spiel legen. Mit der Netzwerkemulation der Engine (Unreal NetEmulation.PktLag) oder mit Linux tc netem auf dem Testserver Latenz hinzufügen und bei unterschiedlichem Ping messen
Spricht dafür
Feedback startet immer genau mit dem Eintreffen der Serverantwort, die Zeit von der Eingabe bis zum Feedback entspricht RTT + Tick-Wartezeit und wächst genau um die hinzugefügte Latenz
Spricht dagegen
Feedback startet sofort beim Tastendruck, nur Ergebnisse wie Schadenszahlen kommen später: korrektes Design. Auch bei niedrigem Ping mehr als ein Tick-Intervall Verzögerung: „Doppeltes Warten auf den Tick“ oder Frame-Probleme im Client
Prüfmittel
Logs oder Metriken aus Spielserver bzw. Client nötig
Mehr dazu
Für Spiele, die keine schnelle Reaktion brauchen, etwa rundenbasierte Spiele, Kartenspiele oder Idle-Games, ist dieses Verfahren am einfachsten und sichersten. Problematisch wird es, wenn ein Spiel mit Echtzeitsteuerung auch Bewegung und Standardangriffe so umsetzt.
Using Gameplay Abilities in Unreal EngineEpic Games Local Predicted führt sofort beim Tastendruck aus, die endgültige Entscheidung trifft der Server. Server Initiated hat keine Vorhersage, der ausführende Spieler sieht die Latenz
Using Network Emulation in Unreal EngineEpic Games Tests mit minimaler und maximaler Latenz sowie Paketverlustrate auf Server und Client, in der Konsole etwa über NetEmulation.PktLag einstellbar
tc-netem(8) — Linux manual pageiproute2 Testwerkzeug, das ausgehenden Paketen Latenz und Jitter (delay TIME JITTER) sowie Verlust (loss random PERCENT) hinzufügt, um reale Netze nachzubilden