Ich programmiere einen dedizierten Server in C # mit BeamServer2-DLLs. Zuerst wollte ich sehen können, wie sich andere Spieler auf unserer bereits erstellten Omuni-Karte bewegen. Dazu habe ich einfach Ihre Position in jedem Frame an den Server gesendet. Das hat geklappt und ich konnte mit ein paar Freunden spielen, aber die Bewegung war nicht nachlässig. Also habe ich versucht, Bewegungsglättung und Sicherheit hinzuzufügen, damit sie nicht einfach eine falsche Position an den Server senden können, ohne dass der Server sie daran hindert, die anderen Clients zu erreichen.
Was ich dann getan habe, habe ich einen MasterClient erstellt, der einen MovementController auf dem RemotePlayer hat. Wenn ein Client umziehen möchte, bewegt er sich lokal und sendet eine Nachricht an den Server mit der Anweisung, sich zu bewegen. Der Server nimmt dann seine Geschwindigkeit und sendet sie an den masterClient. Der masterClient bewegt dann den remotePlayer genauso wie der remotePlayer sich selbst. Wenn er aufhört sich zu bewegen, sendet er eine Nachricht mit seiner Position. Der Masterclient prüft dann, ob die Position, zu der er gekommen ist, so nahe ist wie die Position, die er vom Client hat, wenn dies gemäß dem Ping des Clients realistisch ist, setzt der Server ihn auf die Position des Clients.
Dies funktioniert, aber ich habe immer noch ein Verzögerungsproblem und bin mir nicht sicher, wie ich das beheben soll. Ich muss die Bewegung auf dem Client glätten, aber ich habe selbst herausgefunden, dass ich einfach (x / 2, y / 2, z / 2) zur Position lerp und ihn auf die reale Position im nächsten Frame bringen kann werde es bald wieder versuchen. Selbst wenn das hinzugefügt wird, bin ich mir nicht sicher, ob der Lagg behoben ist.
Irgendwelche anderen Techniken, Vorschläge, Fragen, ...? Danke, Diede.