Zeitliche Verzögerung/Auslösung vermeiden.

  • Hi zusammen!


    Ich stoße sehr häufig auf Situationen in der ich über einen Delay oder anderes... falsch weiterführen muss.


    Damit meine ich etwa als Beispiel: (Es gibt unzählige andere Beispiele in der überprüft werden muss ob die Aktion wirklich ausgeführt wurde.)

    Wenn die Spielfigur durch den Start-Teleporter läuft und auf der anderen Seite am Ziel-Teleporter ankommt, soll ein Sound abgespielt werden.

    Leider geht das ganze aber nur mit einem (nicht optimal) Delay, weil der Sound laut dem Script-Ablauf vorher abgespielt wird, als der Charakter dort im Multiplayer ankommt. Es geht darum das man am Teleporter hören soll ob da etwas ankommt oder nicht, also nicht bei dem Client (als 2D sound).

    Also die Zeit Verzögerung wann der Charakter dort tatsächlich ankommt ist unbekannt (abhängig von der Internetverbindung, von der Rechenleistung ((also wann der Char wirklich da ist))).

    Das bedeutet ich bräuchte irgendwas womit ich überprüfen kann ob etwas (eine Art Bremse) tatsächlich da ist, wo es sein soll. Es könnte ja sein das der Character erst nach 10 Sekunden dort ankommt (weil der PC noch so lange laden muss oder warum auch immer).


    Ich hoffe ihr versteht was ich damit meine.


    Das ganze nur über einen möglichen Delay laufen zu lassen ist eine Katastrophe!



    Das Problem habe ich überall in der ich nicht überprüfen kann ob das gewünschte auch tatschlich ist.

    Z.B. ob die Waffe nun ausgerüstet ist (wegen Delay usw.), da kann es passieren das die Ausrüstungsanimation früher erfolgt als diese sollte.

  • Hast du es schon einmal mit einem Event versucht, welches auslöst, wenn alle Bedingungen erfüllt sind? Denn, ein Delay verschiebt ja nur das Problem. Wenn die Verzögerung beendet ist, bevor alle Bedingungen erfüllt sind, ist es ja auch nicht synchron.

    Mit einem Event, welches ausgelöst wird, wenn alle Bedingungen erfüllt sind, dann könntest du die Synchronität wieder herstellen, auch im Multiplayer.

    Im Großen und Ganzen gibt es allerdings immer eine gewisse Asynchronität bei Onlinespielen. Wenn du mal drauf achtest, gerade bei Shootern und schnelle Aktionen stattfinden, dann kann es passieren, dass du getroffen wirst, obwohl du dich kurz vorher in Deckung begeben hast. Das hat halt etwas mit der Übertragungsgeschwindigkeit etc. zu tun. Ganz vermeiden kann man das nicht. Da gilt, der Server hat immer recht.

  • Die musst du doch so oder so überprüfen, bzw. du synchronisierst sie mit Delays.

    Und wenn es dir um das Onlinespiel geht, das wird nicht gehen. Wie gesagt, große Spieleschmieden kriegen es auch nicht unbedingt hin. Bei Shootern wirst du ja auch abgeschossen, obwohl du denkst, dass du schon in Deckung warst. Der andere Spieler hat dich aber noch fröhlich um die Ecke rennen sehen. Also Synchronität ist nicht wirklich einfach.

  • Was du brauchst ist Client-Side Prediction.

    Die Grundidee besteht darin, die Aktionen des Spielers auf der Client-Seite zu simulieren, bevor er eine Bestätigung vom Server erhält, sodass das Spiel auch bei einer Verzögerung auf dem Server reibungslos weiterlaufen kann.


    Das laufen beim Character ist zum Beispiel Client-Side predicted, weil es sonst extrem clunky würde, falls man das komplett synchron hält.

    Die Unreal Engine unterstützt es in diversen Bereichen.

    Du kannst also Dinge auf dem Client machen, bevor der Server das bestätigt hat. Sehr wichtig, selbst bei normaler Internetgeschwindigkeit.
    Wenn es ein Cheater o.ä. ist, kommt es zu einem Rollback. Im Falle des Chracters wird die Position korrigiert.


    Hoffe das hilft dir weiter.

  • Ist das ganze mit viel Aufwand verbunden, also ein Häkchen irgendwo setzten und gut ist oder muss das ganze sehr intensiv eingepflegt und aktualisiert werden.?