Implementierung der Netzwerkglättung


13

Wir machen einen Multiplikator-Ego-Shooter. Der Client sendet seine Position mit einer festen Rate (derzeit 10 Hz) an den Server. Der Server sendet eine einzelne Nachricht, die die Positionen aller Spieler mit derselben Rate (10 Hz) an alle Spieler enthält.

Wie erwartet ist die Bewegung ziemlich unruhig, da das 60-fps-Spiel nur 10-mal pro Sekunde Updates erhält. Was ist der beste Weg, um diese Bewegung zu glätten? Der naheliegendste Weg wäre, zwischen den letzten beiden Paketen zu interpolieren, sodass die Interpolation endet, sobald wir ein neues Paket erhalten. Dies führt jedoch zu einer sofortigen Verzögerung von 100 ms für alle Spieler.

Die andere Möglichkeit wäre, die Geschwindigkeit und Beschleunigung der letzten Pakete zu verwenden, um vorherzusagen, wo sich der Spieler befindet, bevor das nächste Paket eintrifft. Wenn jedoch die Vorhersage falsch ist, würde der Spieler dazu neigen, zu springen, sobald ein neues Paket empfangen wird .

Weiß jemand, wie AAA-Titel dieses Problem lösen?

Antworten:


9

Sie tun genau das, was Sie gerade gesagt haben - entweder einen dieser beiden Ansätze oder einen Kompromiss zwischen ihnen. (Akzeptieren Sie z. B. eine kleine Verzögerung, und interpolieren Sie nach Möglichkeit. Extrapolieren Sie, wenn der Ping diese Verzögerung überschreitet.) Anstatt zu einer korrigierten Position zurückzuspringen (auch als "Einrasten" bezeichnet), interpolieren Sie normalerweise zwischen den falschen Vorhersagen und den korrigierten Wert, wenn möglich, ausgleichen. Sie können auch Korrekturen in der Vergangenheit durchführen, um den Korrekturaufwand zu verringern.

Dies ist eine häufig gestellte Frage, und es gibt mehrere kanonische Links, die Sie wahrscheinlich an anderer Stelle auf gamedev.stackexchange.com finden, wenn Sie suchen. Dazu gehören die folgenden:

Was jeder Programmierer über Game Networking wissen muss (dies fasst die Dinge in den nächsten beiden Links zusammen)

Source Multiplayer-Netzwerk

Unwirkliche Netzwerkarchitektur

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.