Unreal Engine 4 Network Compendium

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Unreal Engine 4 Network Compendium

    Auf der Suche nach Replication für mein Game bin ich über folgendes PDF Dokument gestolpert:
    cedric-neukirchen.net/Download…Cedric_eXi_Neukirchen.pdf

    Made by: Cedric 'eXi' Neukirchen
    Website: cedric-neukirchen.com
    Blog: cedric-neukirchen.net
    Latest Unreal Engine 4 Version: 4.17.x

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Killerzwerg ()

  • Hab nach der sechsten Seite schon aufgehört. Mein eigener Spieler auf meinem PC wird nicht direkt bewegt, die Eingabe wird erst an den Server geschickt und dann sagt der Server meinem Client das er sich bewegen soll?

    Das stimmt nicht. Das gäbe ein riesiges Input Lag. Spiele wie Counterstrike wäre nicht möglich. Bei Rennspielen würde sich die Steuerung wie an einem Gummibad gezogen anfühlen. Auch der Vorschlag man soll alles auf dem Server überprüfen bevor man es auslöst ist schlicht falsch. Man sollten alles was Cheater ausnutzen könnten überprüfen und nicht schlicht alles. Wenn möglich asynchron dh. dem Client ein Treffer Feedback (Blut, Sound) sofort geben die Hitpoints und den tatsächlichen Treffer des Gegners aber auf dem Server berechnen.

    Nur meine Meinung. Ich kann die PDF nicht empfehlen, auch wenn ich nur die ersten 6 Seiten gelesen habe.
    Meine UE4 Plugins gibt es hier.
  • Socke schrieb:

    Ich kann die PDF nicht empfehlen, auch wenn ich nur die ersten 6 Seiten gelesen habe.
    Vielleicht liegts eben genau daran, dass du nur die ersten 6 Seiten gelesen hast...

    eXi schreibt es auf Seite 34 ganz passend:

    eXi schrieb:

    If the Replication process is not clear at this point, it's all cool, just keep reading and at the endof this Document, you will understand why this works so easily
    Welches PDF kannst denn du empfehlen, wenn man überhaupt keine Ahnung von dem Zeug hat?

    Ich habs bisher auch nur überflogen und nichts ausprobiert (hab grad andere Probleme), aber ich denke, der wird schon wissen was er da geschrieben hat^^
    Auf seiner Website schreibt er übrigens, dass er Lehrer an ner Deutschen Uni ist und Auftragsarbeiten annimmt (wäre schon mal mein Problem gelöst, nen Freelancer zu finden, der mein Spiel Multiplayer-Ready macht).
  • Socke schrieb:

    Mein eigener Spieler auf meinem PC wird nicht direkt bewegt, die Eingabe wird erst an den Server geschickt und dann sagt der Server meinem Client das er sich bewegen soll?
    Genau os lese ich das auch was relativ wenig sinn macht die bessere lösung wäre es einfach nur zu überprüfen wie schnell sich der char bewegt und wenn es nicht passt ihn zurücksetzen oder den wert vom server ändern lassen somit hätte zb der cheat keinen effect wenn er ständig vom server korrigiert wird. (gibt sicher noch ne bessere lösung)


    Killerzwerg schrieb:

    Vielleicht liegts eben genau daran, dass du nur die ersten 6 Seiten gelesen hast...

    eXi schreibt es auf Seite 34 ganz passend:
    If the Replication process is not clear at this point, it's all cool, just keep reading and at the endof this Document, you will understand why this works so easily
    das bezieht sich auf den Lebensbalken teil und macht auch Sinn was da steht aber eben nicht auf die Char Movement (seite 30) was Socke meinte.


    Seite 30 schrieb:

    Not the Client is moving the Character. The Server is getting the Move-inputs

    from the Client and is then moving and replicating the Character!
    das liest sich als wenn da gemeint ist das es auf den eigenen Char zutrifft und das ist schlecht = LAG
    auf den Chars von den andern Spielern macht es wiederum Sinn, zwecks anzeige bei dir damit sie sich auch richtig bewegen
  • Hey zusammen

    Socke schrieb:

    Mein eigener Spieler auf meinem PC wird nicht direkt bewegt, die Eingabe wird erst an den Server geschickt und dann sagt der Server meinem Client das er sich bewegen soll?

    Das stimmt nicht. Das gäbe ein riesiges Input Lag. Spiele wie Counterstrike wäre nicht möglich. Bei Rennspielen würde sich die Steuerung wie an einem Gummibad gezogen anfühlen.
    Das stimmt nicht, nicht. Daher der Server im Allgemeinen der korrekte Status vom Objekt repräsentiert. Er erklärt im Script wunderbar wie dieses "lag" umgangen werden kann, nämlich üblicherweise indem der Client die direkte Kontroller der Pawn übernimmt und der Server die Autorität behält.


    Socke schrieb:


    Auch der Vorschlag man soll alles auf dem Server überprüfen bevor man es auslöst ist schlicht falsch. Man sollten alles was Cheater ausnutzen könnten überprüfen und nicht schlicht alles. Wenn möglich asynchron dh. dem Client ein Treffer Feedback (Blut, Sound) sofort geben die Hitpoints und den tatsächlichen Treffer des Gegners aber auf dem Server berechnen.
    Wo ist dieser Vorschlag im Script? Das kannst du ja machen wie du willst. Wäre ja cool wenn wir einfach alles vom Server machen lassen können. Natürlich ist das nicht optimal, obwohl die UE4 ist sehr bandwidth Effizient ist, sollte man die Ressourcen ja nicht so, in gewisser Weise unnötig, verschleudern und das hat natürlich auch seine Grenzen.
  • Socke schrieb:

    Hab nach der sechsten Seite schon aufgehört. Mein eigener Spieler auf meinem PC wird nicht direkt bewegt, die Eingabe wird erst an den Server geschickt und dann sagt der Server meinem Client das er sich bewegen soll?

    Das stimmt nicht. Das gäbe ein riesiges Input Lag. Spiele wie Counterstrike wäre nicht möglich. Bei Rennspielen würde sich die Steuerung wie an einem Gummibad gezogen anfühlen. Auch der Vorschlag man soll alles auf dem Server überprüfen bevor man es auslöst ist schlicht falsch. Man sollten alles was Cheater ausnutzen könnten überprüfen und nicht schlicht alles. Wenn möglich asynchron dh. dem Client ein Treffer Feedback (Blut, Sound) sofort geben die Hitpoints und den tatsächlichen Treffer des Gegners aber auf dem Server berechnen.

    Nur meine Meinung. Ich kann die PDF nicht empfehlen, auch wenn ich nur die ersten 6 Seiten gelesen habe.
    Ich glaube er meint damit, dass Standartmäßig die CharacterMovementComponent benutzt wird. Alle replizierten Character befinden sich im engeren Sinn nur auf dem Server. Du hast nur die Kontrolle über z.B. einen Character. Wenn du Ihn jetzt bei dir bewegst, läuft er ohne Lag los, aber die relevante Bewegung findet auf dem Server statt. Klar gibt es noch deine lokale Bewegung, aber die hat nur Steuerungscharacter.

    Das heißt: Wenn der Client eine zu schnelle Bewegung ausfüht (z.B. durch cheaten), die dem Server unplausibel erscheint (der Server bewegt den Character ja auch), kann der Server den Character kicken, oder ignorieren, eventuell den Character quasi auch zu dir mit verbesserten koordinaten zurückreplizieren. Denn Der Character existiert ja nur auf dem Server. Du hast nur eine Puppe ^^

    Das alles bei einem guten Spiel ohne Input lag erscheint ist in diesem Fall nur eine Illusion, denn es gibt natürlich überall einen Input-Lag. Allerdings ist der vergleichbar gering. Spiele wie LOL fahren doch auch diese Schiene. Es kommt einem zwar so vor, als steuere man seinen Character lokal (man kann ja auch rumlaufen, wenn z.B. die Serververbindung weg ist), aber das relevante Movement bleibt etwas verzögert, bzw fällt in diesem Extremfall ganz aus.
    Soviel Lag ist das auch nicht. Stell dir vor du steuerst ein Auto und willst JETZT plötzlich (nachdem ein Hindernis aufgetaucht ist) nach links ausweichen. Wenn du jetzt deine Auto-Puppe nach links ausweichen lässt, und du deine Nachricht zum Server schickst, der dann dein Auto wenn möglich auf diese Position ausweichen lässt, oder ob du das Auto bei dir lokal ausweichen lässt, und dann die Position zum Server schickst, macht nur einen Unterschied, wenn du cheatest (z.B. schneller ausweichen willst, als du darfst)
    Marktplatz-Projekt: Surveillance Camera Madness
    Snake Spiel für Android: itch.io // Jewel Snake
    Youtube: Deutsche Tutorial Serie
  • Ich habe wie gesagt nur die ersten 6 Seiten gelesen. Auf Seite 5 ist der Satz den @LucyDemoon zittiert hat. Und der ist Unsinn. Ich kann einen Ping von 3000ms haben. Das hat absolut keine Auswirkung auf die Bewegung meines Charakters und wenn doch dann ist es schlicht falsch es so zu machen. Einer der Gründe warum gestreamte Spiele momentan so abgelehnt werden ist dieser Input Lag. Der entsteht nur zu einem sehr geringen teil durch das Encoding des Videos und zum großteil eben aus der Tatsache das die Eingaben erst an den Server geschickt werden müssen.

    Es gibt doch einige Youtube Videos zum Thema UE4 Mulitplayer. Müsste auch welche aus unserer Comunity geben. Von @Nobody und @Dj EKI glaub ich.

    Wie gesagt, ist nur meine eigene Meinung basierend auf den "erschreckenden falschen angaben" der ersten 6 Seiten. Kann sein dass es später doch noch korrekt weitergeht. Ich wollte nur drauf Hinweisen was mir (seit gut 10 Jahren auf Netzwerk spezialisierter Programmierer :P ) aufgefallen ist. Wen jemand anderes einen Film kritisiert muss der für einem selbst ja trotzdem nicht schlecht sein.

    Man kann es auch wie in PUBG machen. Alles auf dem Client berechnen und 1 Million neuer Kopien monatlich an die gebannten Cheater verkaufen. :D
    Meine UE4 Plugins gibt es hier.
  • @Socke
    Du möchtest eine Art p2p OnlineSpiel ohne Server machen, bzw den Server nur als Paketboten benutzen. Aber wie soll dann jemand z.B. entscheiden, ob meine Kugel dich jetzt getroffen hat oder nicht? Entscheidet mein Client das? Oder deiner?
    In jedem Fall wäre das Fatal, und früher oder später würde es Cheater geben, die einfach alles töten oder unsterblich sind.
    Daher muss z.B. die Schadensberechnung (oder eben positionsberechnung) auf dem Server passieren, da er im Idealfall neutral ist. Auch bei HL/CS übernimmt ein Spieler die Rolle des Hosts, wenn es kein DS ist.


    Und wo ist wie gesagt der Unterschied, ob der Client dem Server jetzt sagt:
    "Bitte verschiebe meinen Character nach [10,10], update bitte seine Position für alle einschließlich mich"
    oder ob der Client sagt:
    "Mein Character steht jetzt auf [10,10], du wirst seine Position für alle anderen updaten!"

    Genau, Es gibt nahezu keinen Unterschied, bis den kleinen, dass der Server nochmal eine Art Bestätigungsposition BEI BEDARF an den Client schickt, die er sonst nicht schicken müsste. Dafür hat man jetzt aber 100% Kontrolle auf dem Server, und lagert soein wichtiges Spielverhalten nicht auf die Clients aus.
    Und der Client bekommt davon garnichts mit, denn er steuert seinen Lokalen Pawn auchnoch weiter, wenn der Server down geht. Und da die Abweichungen, wenn es welche geben sollte, interpoliert werden, ist das kein Problem.

    Du hast Recht, wenn du sagst, es würde zu Input Lag führen, wenn alles NUR auf dem Server geregelt wird, und der Client quasi nur sendet und empfängt.

    Es ist natürlich nicht so, dass der Client dem Server eine Nachricht schickt "Bitte Bewegen meinen Pawn 1 Meter nach vorne", und der Server schickt dem Client dann die Position zurück, woraufhin geupdated wird. Klar, in diesem Fall würde ich dir komplett zustimmen, aber das System hier ist viel komplexer. Es ist vielleicht wirklich nicht gut ausgedrückt, wenn man davon redet, dass die pawns "nur" auf dem server existieren, denn sie haben ja durchaus eine lokale Komponente.
    Marktplatz-Projekt: Surveillance Camera Madness
    Snake Spiel für Android: itch.io // Jewel Snake
    Youtube: Deutsche Tutorial Serie

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Tankbuster ()

  • Tankbuster schrieb:

    Es ist natürlich nicht so, dass der Client dem Server eine Nachricht schickt "Bitte Bewegen meinen Pawn 1 Meter nach vorne", und der Server schickt dem Client dann die Position zurück, woraufhin geupdated wird. Klar, in diesem Fall würde ich dir komplett zustimmen, aber das System hier ist viel komplexer. Es ist vielleicht wirklich nicht gut ausgedrückt, wenn man davon redet, dass die pawns "nur" auf dem server existieren, denn sie haben ja durchaus eine lokale Komponente.
    und genau das ist der punkt was Socke meinte das eben das was auf Seite 30 steht der PDF im Note: teil
    und darum ging es auch gerade

    um das nochmal dazustellen


    Client >Server >Client >Server >Clients
    Bewegung Sendenok Bewege dichBewegt sichüberprüft Bewegung + Update an alle Clients
    update Bewegung andere Clients

    hier sieht man, was Socke denk ich mal meinte die ersten 2 Schritte sind sinnlos bzw verursachen den lag je nach inetleitung

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von LucyDemoon ()

  • @Dj EKI Dachte das wäre öffentlich. Sorry.
    Das video zeigt (ab 27:00) das bei UE4 der Character lokal gesteuert wird. Dazu ein Zitat aus der PDF

    When you move your Character, as a Client, in a Multiplayer Match, you don't actually move your Character by yourself, but tell the Server that you want to move it. The Server then updates the location of the Character for everyone else, including you.
    Das Video widerlegt diese Aussage und zeigt den Wert der PDF.

    @LucyDemoon
    Danke. Du hast mich verstanden.

    Bitte kein Drama draus machen. Jeder kann sein Spiel so machen wie er will. Ich habe nur konstruktive (Beispiel wie es richtig ist wurde von mir genannt) Kritik an der PDF geäußert.

    Hab meine Aktivität hier schon runtergefahren. Ich glaub ich werde noch seltener rein schauen.
    Meine UE4 Plugins gibt es hier.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Socke ()

  • @Socke
    Ich wollte dich nicht angreifen oder deine Kritik, ich glaub weiterhin, dass es sich um ein Missverständniss handelt.
    When you move your Character, as a Client, in a Multiplayer Match, you don't actually move your Character by yourself, but tell the Server that you want to move it. The Server then updates the location of the Character for everyone else, including you.
    Hier wird gesagt, dass ein Objekt, dass sich auf dem Server befindet, nur vom Server bewegt werden kann. Es ist ja auch nicht anders möglich, und das der Server die Location der Character für alle updatet.

    Man könnte auch sagen: "Wenn ich Person X anrufe, und von dieser Person X verlange, dass sie ein Objekt bewegt, dann habe ich das Objekt ja nicht bewegt."
    Was ist an dieser Aussage falsch? Ich versteh es nicht.

    Auf der selben Seite (Page 5) wird noch zitiert:
    Note: To prevent a feeling of “lag” for the local Client, Coders often, in addition, let this Player directly control their Character locally, although the Server still might override the Character's Location when the Client starts cheating!
    Was Unreal ja anscheinend benutzt. (siehe EKIs Video) ( bei 27:47 sieht man sogar, dass der client seine position nochmal vom server bekommt. )

    Darum ist das PDF nicht falsch, und nicht wertlos in meinen Augen.
    Außerdem sollte man den Wert eines PDFs sowieso nicht an einem Satz festlegen. :>

    LucyDemoon schrieb:

    um das nochmal dazustellen

    Client >Server >Client >Server >Clients
    Bewegung Sendenok Bewege dichBewegt sichüberprüft Bewegung + Update an alle Clientsupdate Bewegung andere Clients

    hier sieht man, was Socke denk ich mal meinte die ersten 2 Schritte sind sinnlos bzw verursachen den lag je nach inetleitung
    Ja, sind sie auch, aber es ist wie gesagt ein Missverständnis, denn das hat der Autor dieses Dokuments niemals behauptet.


    z.B. Seite 30
    Note: Not the Client is moving the Character. The Server is getting the Move-inputs from the Client and is then moving and replicating the Character!
    Damit sagt er in seinem Dokument nur, dass der Server die Position vom Client (MoveInputs der CharacterMovementComponent) bekommt, und dann den Pawn an alle anderen Clients repliziert.

    Hier wird NICHT gesagt, dass meine TastenEingabe (Input) zum Server gesendet wird, und solange der nichts zurückschickt steht mein Character rum.

    Und das ist richtig. Er hätte auch schreiben können
    Note: Not the Client is moving the Character. The Server is getting the Position from the Client and is then moving and replicating the Character!
    Denn nur der Server kann den Character replizieren, Nur der Server kann den Server-Character bewegen, denn dieser Character existiert nur auf dem Server.
    Dagegen kann man wie gesagt nicht agumentieren.
    Marktplatz-Projekt: Surveillance Camera Madness
    Snake Spiel für Android: itch.io // Jewel Snake
    Youtube: Deutsche Tutorial Serie

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Tankbuster ()

  • Socke schrieb:

    Ich habe nur konstruktive (Beispiel wie es richtig ist wurde von mir genannt) Kritik an der PDF geäußert.


    Hab meine Aktivität hier schon runtergefahren. Ich glaub ich werde noch seltener rein schauen.
    Ich hoffe ich bin nicht mit Schuld daran, wie @Tankbuster es schon sagte, der Wert des PDF ist nicht an einem Satz festzulegen, darauf wollte ich in meiner ersten Antwort hinaus, auch wenn es evtl. falsch rüber kam^^
    Würde mich freuen, wenn du nochmal rein gucken könntest und bisschen mehr lesen/überfliegen und dann evtl. doch zu dem Schluss kommst, dass es richtig ist, sonst werde ich nen Verweis rein setzen, dass nicht alles richtig ist oder den Link direkt löschen.
  • Sorry erstmal für meinen letzten unordentlichen Beitrag.

    Ich möchte auch nicht daran Schuld sein, wenn ich irgendjemanden vergraule, weil ich ein Klugscheißer bin oder so.

    Ich finde auch, Cedric hätte es in diesem Dokument etwas besser differenzieren können. Wenn er über Inputs redet, meint er wahrscheinlich keine "TastaturEingaben", sondern die Input-Vektoren, des CharacterMovementComponents(was ja für die replication des Movements zuständig ist)/bzw die bewegungs oder positions vektoren.
    Oder wenn er darüber redet, dass ein Character nur auf einem Server existiert, obwohl er quasi ja auch lokal angezeigt wird... darüber kann man auch streiten, in wie weit das jetzt wahr oder falsch ist.

    Eigentlich wollte er nur sagen "Objekte, die auf dem Server existieren kann nur der Server verändern"
    und
    "Clients können dem Server sagen, dass Sie sich bewegen, woraufhin der Server das überprüft und Ihren Character auf dem Server bewegt."
    und
    "Der Server kann die Character an alle Clients replizieren"

    Und darauf wollte ich hinaus. Nicht, dass jetzt jemand denkt, das Dokument ist voller Fehlinformationen, denn 100 Seiten sind schon eine Menge arbeit, die sich jemand gemacht hat, da wäre es schade,dass alles zu zerstören.

    EDIT: @Socke, mir geht es nicht darum deine Kenntnisse anzuzweifelt. Du verstehst wahrscheinlich mehr von Netzwerk-Kram als ich. Das kann man ja schon an deinen Marketplace-Assets sehen. Es geht mir nur darum, dass du den Autor vermutlich falsch verstanden hast (was total menschlich ist), und darum dieses Dokument direkt abschreibst. Und das finde ich irgendwie nicht richtig, da es meiner Meinung nach eben nur ein Missverständniss der Kommunikation/Sprache ist.
    Marktplatz-Projekt: Surveillance Camera Madness
    Snake Spiel für Android: itch.io // Jewel Snake
    Youtube: Deutsche Tutorial Serie

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Tankbuster ()

  • mmh verstehe das Problem nicht, alles was du machst wird im Endeffekt über den Server ausgeführt denn er muss ja allen anderen Clienten zeigen das du gerade geschossen hast oder dich bewegst. Natürlich ist dein input dein eigener aber am Ende der Kette steht immer der Server der deine Position allen anderen mitteilt. Ist ja nicht umsonst wichtig solche Sachen zu replicaten.
Unreal®, Unreal Engine, the circle-U logo and the Powered by Unreal Engine logo are trademarks or registered trademarks of Epic Games, Inc. in the United States and elsewhere.