Ich arbeite an einem Unity-Handyspiel, ähnlich einer Multiplayer-Version von Temple Run . Ich sehe eine schwankende Netzwerklatenz (im Allgemeinen 200-500 ms) aufgrund der mobilen Plattform.
Die beiden Spielercharaktere laufen auf demselben Pfad und müssen einfache Aktionen (Springen, Rutschen, Einschalten usw.) ausführen, um Hindernisse zu überwinden.
Wenn eine Nachricht zu spät kommt, nimmt das Spiel der Remote - Spieler übergeben ein Hindernis. Dies funktioniert normalerweise gut, aber falls ein Spieler durch ein Hindernis getötet wird, möchte ich, dass der entfernte Spieler auf demselben Hindernis / derselben Position wie der lokale Spieler zu sterben scheint. Aufgrund der Latenz scheint der Remote-Player das Hindernis überschritten zu haben, bevor die Nachricht, die seinen Tod ankündigt, überhaupt eintrifft.
Wie kann ich die Spieler synchronisieren?
Ich habe versucht, den Remote-Player sofort wieder in die Todesposition des lokalen Spielers zu bringen, sobald die Todesmeldung eintrifft. Sie sieht optisch unangenehm aus und kann andere Synchronisierungsprobleme aufwerfen.
quelle
Um Ankos Antwort zu ergänzen, können Sie Ihr Spieldesign ein wenig ändern, indem Sie die Konsequenz des fehlgeschlagenen Hindernisses nach dem Fehler hinzufügen. Ein fehlgeschlagener Sprung führt beispielsweise dazu, dass Sie in einer Schlammpfütze landen, die den Spieler disqualifiziert. Auf diese Weise bemerkt der andere Spieler den Fehler, indem er sieht, wie der andere in den Schlamm fällt, während der Spieler, der versagt, ihn sofort sieht.
Hier ist ein schöner Blog-Beitrag zu diesem Thema (es ist nicht so aktuell, aber ziemlich interessant): Darrin Wests Zeitmanagement und Synchronisation .
quelle
Ist es für den lokalen Spieler so wichtig, die genaue Position des Todes des entfernten Spielers zu kennen? Angenommen, der Remote-Player konnte nicht über eines Ihrer Hindernisse springen und ist somit gestorben.
Der tote Spieler würde seinen Tod sofort sehen und vom Ort des Unfalls aus fortfahren. Hier ist nichts Magisches.
Der lokale Spieler (derjenige, der noch lebt und tritt) würde sehen, dass der entfernte Spieler das Hindernis erfolgreich passiert. Eine Todesmeldung würde eingehen. Der entfernte Spieler würde auf den Beinen stolpern, fallen und langsam verschwinden. Wenn Sie das nächste Mal die Position des Remote-Players kennen, wird der Player genau in diese Position eingeblendet und läuft wieder normal. In einem solchen Setup wären sich die Spieler der Latenz bewusst, aber die Latenz würde als ein Spielelement (Stolpern) dargestellt, anstatt ruckartig auftauchende und verschwindende Spieler.
Wenn die Geschwindigkeit der beiden Spieler konstant ist, die Laufbahn vordefiniert ist und die Zeit bekannt ist, die erforderlich ist, um sich von einem Sturz zu erholen, können Sie den verblassenden / verschwindenden Teil vollständig eliminieren. Stellen Sie sich einen entfernten Spieler vor, der an einem der Hindernisse stirbt. Die lokale Darstellung wird noch ausgeführt, wenn eine Benachrichtigung eingeht. Der Spieler stolpert sofort. Es braucht Zeit, bis sie aufstehen und wieder laufen. Tatsächlich dauert es so lange, als ob sie am Hindernis sterben würden. Wenn sie wieder in Betrieb sind, werden sowohl lokale als auch entfernte Positionen synchronisiert.
quelle