Client Prediction so einfach wie möglich erklärt
Multiplayer-Bewegung wirkt kompliziert. Sie besteht eigentlich aus drei Schritten: vorhersagen, vergleichen, korrigieren.
Warum man das braucht
Ohne Server-Autorität lässt sich Cheating nicht verhindern. Schickt man aber jede Eingabe an den Server und wartet auf Antwort, sieht der Spieler eine Figur, die sich 80 ms nach dem Tastendruck bewegt. Das ist unspielbar.
Die Lösung: Der Client wendet die Bewegung sofort lokal an und schickt die Eingabe gleichzeitig an den Server. Er sagt also die Zukunft voraus.
Drei Schritte
Vorhersagen: Der Client simuliert die Eingabe sofort und schreibt das Ergebnis mit der Tick-Nummer in einen Verlaufspuffer.
Vergleichen: Sendet der Server sein eigenes Ergebnis, vergleicht der Client es mit dem, was er für diesen Tick gespeichert hat.
Korrigieren: Liegt der Unterschied in der Toleranz, passiert nichts. Sonst wird auf die Serverposition gesetzt und jede Eingabe seit diesem Tick erneut abgespielt.
Fallen in der Praxis
Die Simulation muss deterministisch sein. Dieselbe Eingabe aus demselben Ausgangszustand muss dasselbe Ergebnis liefern. Ein Physikschritt auf Basis von Time.deltaTime bricht das — nutze einen festen Tick.
Korrigiere nicht abrupt. Kleine Unterschiede über einige Frames zu glätten verhindert, dass sich der Spieler teleportiert fühlt.
Wo man anfängt
Baue zuerst die Einzelspielerbewegung auf einem festen Tick und mache sie deterministisch. Die Netzwerkschicht kommt danach.
Wer diese Reihenfolge umdreht, debuggt Bewegungsfehler und Synchronisationsfehler gleichzeitig. Aus Erfahrung gesprochen.