Hero background image

Netzwerklatenzmanagement in Multiplayer-Spielen

Verstehen Sie die Grundlagen der Netzwerkverzögerung in Mehrspieler-Spielen und lernen Sie Strategien, um damit umzugehen.
Diese Seite wurde maschinell übersetzt. Um die Originalversion zu sehen, damit Sie die Genauigkeit anhand der Quelle prüfen können,

Einführung in die Netzwerkverzögerung

Der Abstand zwischen Server und Clients, Paket-Hops, die Tick- und Aktualisierungsrate eines Servers und eine Vielzahl anderer Probleme tragen zur Multiplayer-Verzögerung bei – hier erfahren Sie, wie Sie damit umgehen können.

Was ist Netzwerkverzögerung?

Onlinespiele haben Probleme, um die sich Einzelspieler- oder LAN-Only-Spiele nicht kümmern müssen, wie Jitter, Round-Trip-Zeit (RTT) oder Paketverlust.

Jede Art von Verzögerung beim Senden, Empfangen und Warten von Informationen zwischen Clients und Servern kann ein Problem für das Gameplay verursachen. Für eine vollständige Liste von Definitionen und Problemen, siehe dieser Leitfaden hier.

Um Latenzprobleme erfolgreich zu beheben, müssen Sie die Priorität und die Beziehung zwischen den folgenden Elementen berücksichtigen:

1. Sicherheit

2. Reaktivität

3. Genauigkeit und Konsistenz

Keine Lösung ist perfekt, und jeder Ansatz zur Bewältigung von Latenzproblemen hat Stärken und Schwächen. Der Schlüssel liegt darin, den Weg zu finden, der am besten für Ihr Spiel funktioniert, und dieser Leitfaden wird Ihnen helfen, zu verstehen, wie Sie diese Entscheidung treffen können.

Behörde

Autorität definiert, wer das Recht hat, endgültige Entscheidungen über das Gameplay in der Client-Server-Beziehung zu treffen. Das von Ihnen ausgewählte Autoritätsmodell hat Auswirkungen auf die Netzwerkverzögerung in Ihrem Spiel.

Es gibt zwei Autoritätstypen in Mehrspieler-Spielen, und jeder hat seine eigene Beziehung zu Sicherheit, Reaktivität und Konsistenz:

  • Serverautorität: Sicherer, weniger reaktiv, keine Synchronisierungsprobleme.
  • Kundenautorität: Weniger sicher, reaktiver, mögliche Synchronisierungsprobleme.

Jeder Code, der auf der Client-Seite existiert, kann manipuliert werden, und Spieler können falsche Netzwerknachrichten an den Server fälschen.

Wie funktioniert das in der Realität?

Wenn Sie wissen möchten, wie das in Ihrem Spiel aussehen könnte, ziehen Sie das Beispiel eines Spiels in Betracht, in dem Sie Imps aus einer bestimmten Entfernung nicht töten können.

Wenn Sie in Ihrer Client-Logik angeben, dass Sie diese Imps nicht mehr als 10 Meter entfernt töten können, aber die "Imp töten"-Nachricht ein Server-RPC ist, das die Entfernung auf der Serverseite nicht überprüft, können die Spieler diese Netzwerknachricht fälschen, um Ihre Client-seitige Logik zu umgehen.

Leider werden einige Menschen immer versuchen, dein Spiel zu stören, daher solltest du immer im Hinterkopf behalten, dass du den Kunden niemals vollständig vertrauen kannst. Im Interesse dieser armen kleinen Teufel und aller anderen, die Ihr Spiel spielen, benötigt Ihr Server eine Logik, um die Spieleraktionen von den Clients zu validieren.

Autoritätsmodelle und Latenz

Das von Ihnen ausgewählte Autoritätsmodell hat Auswirkungen auf die Netzwerkverzögerung in Ihrem Spiel. Lassen Sie uns die beiden Autoritätstypen und ihre Beziehung zu Sicherheit, Reaktivität und Konsistenz überprüfen.

Server autoritative Spiele
Server autoritative Spiele

Ein serverautorisiertes Spiel hat alle seine endgültigen Spielentscheidungen, die vom Server ausgeführt werden.

Sicherheit ✅

Kritische Daten wie die Gesundheit oder Position Ihres Charakters können serverseitig autoritativ sein, um sicherzustellen, dass Betrüger damit nicht herumspielen können. In diesem Fall hat der Server das letzte Wort über den Wert dieser Daten.

Konsistenz ✅

Ein Vorteil von serverautoritativen Spielen ist die Konsistenz deiner Welt. Da alle Entscheidungen im Gameplay von demselben Knoten im Netzwerk (dem Server) getroffen werden, können Sie sicher sein, dass diese Entscheidungen zur gleichen Zeit getroffen werden.

Reaktivität 🚫

Ein Problem mit der Serverautorisierung ist, dass man darauf wartet, dass der Server einem sagt, dass man die Welt aktualisieren soll. Bleiben Sie jedoch dran, da es Muster gibt, die Sie verwenden können, um dieses Problem zu lösen, während Sie weiterhin serverautoritär bleiben.

Kunden autoritative Spiele
Kunden autoritative Spiele

In einem clientautoritativen Spiel haben Sie immer noch einen Server, der verwendet wird, um den Weltzustand zu teilen, aber die Clients werden ihre eigene Realität besitzen und durchsetzen.

Reaktivität ✅

Ein clientautoritätsmodell kann oft verwendet werden, wenn Sie Ihren Benutzern oder deren Geräten vertrauen, und es ist ein nützliches Modell für Reaktivität. Da der Kunde selbst alle wichtigen Entscheidungen im Gameplay trifft, kann er das Ergebnis der Benutzereingaben sofort anzeigen, sobald sie erfolgen.

Konsistenz 🚫

Client-autoritative Spiele können Synchronisationsprobleme haben. Wenn Sie Ihren Kunden eine autoritative Entscheidung auf der Grundlage veralteter Informationen treffen lassen, werden Sie auf Desynchronisationen, überlappende physikalische Objekte und andere solche Probleme stoßen.

Sicherheit 🚫

Die Client-Autorität ist eine ziemlich gefährliche Tür, die Sie auf Ihrem Server offen lassen können, da jeder böswillige Spieler Nachrichten fälschen könnte, um das Spiel zu gewinnen.

Latenzprobleme in serverautoritativen Spielen lösen

Die beste Praxis für die Entwicklung von Mehrspielerspielen besteht darin, ein serverautoritäres Modell für Konsistenz und Sicherheit zu übernehmen. Lassen Sie uns vier wichtige Strategien zur Verwaltung der Latenz in diesen Spielen behandeln.

1. Erlauben Sie eine geringe Einflussnahme der Kundenautorität

Beim Entwerfen Ihrer Funktion verwenden Sie die Serverautorisierung als Standard und identifizieren Sie dann, welche Funktion Reaktivität benötigt und keinen großen Einfluss auf die Sicherheit oder die Konsistenz der Welt hat.

Benutzereingaben sind ein gutes Beispiel. Da die Benutzer bereits ihre Eingaben besitzen (ich besitze meinen Tastendruck, der Server kann mir nicht sagen "nein, du hast die W-Taste nicht gedrückt"), können Benutzereingabedaten leicht clientgesteuert sein.

In FPS-Spielen kann Ihre Blickrichtung leicht clientgesteuert sein, ohne viel Einfluss zu haben. Der Client wird dem Server seine Blickrichtung anstelle von Mausbewegungen senden. Eine Korrektur darüber, wo man hinschaut, würde sich seltsam anfühlen, und die Sicherheit dafür hat ihre eigenen Herausforderungen.

2. Client-seitige Vorhersage

Vorhersage kann Ihren Spielserver autoritativ halten und gleichzeitig reaktiv bleiben. Ihr Kunde simuliert und führt Gameplay-Code aus, der die Eingaben Ihrer Spieler antizipiert, anstatt auf eine vollständige RTT für Aktionsresultate zu warten.

Hier kommt die "Versöhnung" ins Spiel – wenn Fehler in der Vorhersage auftreten. Der Client führt eine Historie der vorhergesagten Positionen, und da der Server autoritativ ist, erhält der Client weiterhin Positionen, die vom Server kommen. Der Kunde wird überprüfen, ob die Positionen, die er in der Vergangenheit vorhergesagt hat, mit den alten Positionen vom Server übereinstimmen.

Der Client kann dann Abweichungen erkennen und seine Position gemäß der autoritativen Position des Servers korrigieren.

Hinweis Diese Methode wird derzeit von Netcode für GameObjects nicht vollständig unterstützt.

3. Handlungsantizipation

Es gibt mehrere Gründe, warum der serverautorisierte Gameplay-Code nicht sowohl auf der Client-Seite (mit Vorhersage) als auch auf der Server-Seite ausgeführt werden sollte. Aber wie stellen Sie sicher, dass der Wurf reaktionsschnell ist und dass Ihr Kunde nicht auf eine vollständige RTT warten muss, bevor er etwas sieht, das auf seine Eingabe reagiert?

Ein Trick, der oft verwendet wird, um Verzögerungen zu verbergen, besteht darin, eine nicht spielbeeinflussende Animation, einen Sound oder VFX sofort bei der Eingabe des Spielers auszulösen, aber dennoch auf die serverautorisierenden Gameplay-Elemente zu warten, um den Rest der Aktion zu steuern.

Wenn der Server einen anderen Zustand hat, ist das Schlimmste, was auf der Client-Seite passiert, dass Sie eine schnelle, aber nutzlose Animation abgespielt haben. Es ist einfach, die Animation einfach zu beenden oder abzubrechen. Dies wird als Aktionscasting oder Aktionserwartung bezeichnet.

4. Server-seitiges Zurückspulen (auch bekannt als Verzögerungsausgleich)

Der Server-Rücklauf ist eine Sicherheitsüberprüfung einer clientgesteuerten Funktion, um sicherzustellen, dass wir serverautoritär bleiben.

Der Kunde sendet zusammen mit seiner Eingabe eine Nachricht an den Server: "Ich habe mein Ziel zur Zeit t erreicht." Der Server wird, wenn er dies zur Zeit t+RTT/2 erhält, seine Simulation zur Zeit t-RTT zurückspulen, den Schuss validieren und die Welt zur spätesten Zeit korrigieren (d.h. das Ziel eliminieren). Dies ermöglicht es dem Spieler, das Gefühl zu haben, dass die Welt konsistent ist, während sie gleichzeitig sicher und serverautoritär bleibt.

Hinweis: Der Server-Rücklauf des Spielstands erfolgt alles in demselben Frame und ist für die Spieler unsichtbar. Dies ist eine serverseitige Überprüfung, die es ermöglicht, einen Client zu validieren, der Ihnen sagt, was zu tun ist.

Hinweis Diese Methode wird derzeit von Netcode für GameObjects nicht vollständig unterstützt.

Fazit

Der Bau eines Mehrspieler-Spiels ist ein herausforderndes Unterfangen, aber auch ein aufregendes. Egal, ob Sie den nächsten Battle-Royale-Hit entwickeln oder ein gemütliches Online-Co-op, das Verständnis der Nuancen der Latenz und wie man sie verwaltet, ist entscheidend.

Schau dir unsere Multiplayer-Dokumentation an, um noch heute mit deinem nächsten Projekt zu beginnen.