Multiplayer hat mindestens dreimal so viel Entwicklungszeit und Probleme bedeutet, wie ich für Sunderstar ohne Multiplayer erwarten würde. Selbst ein vergleichsweise einfacher Weltraum-Shooter wird kompliziert, wenn Client und Server sich nicht einig sind, wo ein Schiff oder Projektil sein sollte.

Die Probleme zeigten sich bei grundlegenden Aktionen. Das Warten auf Serverupdates verzögerte die Reaktion auf Bewegungseingaben. Bei Kollisionen konnten Unterschiede zwischen Client und Server das Schiff auf eine korrigierte Position zurückziehen. Verspätete Updates erschwerten flüssige Bewegungen entfernter Objekte.

Beim Schießen gab es ähnliche Probleme. Bei Waffenstreuung ließ sich ein sofortiger lokaler Schuss nicht zuverlässig dem Serverprojektil zuordnen. Eine Korrektur auf eine ältere Serverposition konnte ihn zurückspringen lassen oder wie einen Geschwindigkeitswechsel aussehen. Treffereffekte mussten zudem rechtzeitig erscheinen, ohne bei der Serverbestätigung erneut aufzublitzen.

Ich habe das lokale Schiff so geändert, dass es Bewegungen sofort mit denselben Berechnungen wie der Server vorhersagt und Unterschiede bei eintreffenden Updates korrigiert. Andere Schiffe bewegen sich flüssig zwischen empfangenen Positionen, mit einer begrenzten Bewegungsschätzung bei verspäteten Updates.

Auch Kollisionen brauchen Vorhersage. Der Client berechnet nun anhand der Kollisionsdaten des Servers, wie dein Schiff auf einen Asteroiden oder ein anderes Schiff reagiert. Nur dein Schiff wird lokal bewegt. Kleine Positionskorrekturen werden geglättet; große Änderungen wie Teleportationen erfolgen sofort.

Das sichtbare Projektil übernimmt nun die Serverrichtung ohne Rücksprung und hält seine Geschwindigkeit konstant. Treffereffekte erscheinen lokal, und passende Servereffekte werden unterdrückt, damit derselbe Treffer nicht zweimal aufblitzt. Treffer und Schaden bestimmt weiterhin der Server.

Außerdem verwenden Projektilerzeugung, Mündungsblitze, Ton und Wiedergabe jetzt dieselbe Position an der Laufmündung. Die Änderung der Bewegungsvorhersage hat sogar einen Fehler bei der Bot-Zuordnung im Host-Modus aufgedeckt, der behoben werden musste.

Die automatisierten Prüfungen sind bestanden, und in Unitys Netzwerksimulation haben sich die Messwerte bereits verbessert. Diese Verbesserungen muss ich noch in einer echten Spielsitzung über das Internet mit einem dedizierten Server überprüfen.

Falls ihr an Multiplayer gearbeitet habt: Welche scheinbar einfache Funktion hat am meisten Zeit gebraucht, bis sie richtig funktioniert hat?