Weltbaukasten (Fragen)

  • Hallo!

    Ich habe ein komisches Problem und zwar möchte ich gerne die "World Variable" haben, damit ich in einem Struct das Level eintragen kann, jedoch finde ich nichts dazu.


    Ich möchte im Struct diese Variable einfügen so wie ich diese im Actor Blueprint eingeführt habe, jedoch kann ich diese Variable in der Auswahl nicht finden. Daher die Frage an euch wie findet man die World Variable damit man auch Level auswählen kann?
    Ich konnte diese World Variable nur erstellen rückwärts ausgerichtet durch "Open Level".





    Weitere Frage:

    Ich möchte gerne ein Level so gestalten das dieses aus zufälligen Level Elementen zusammen gefügt wird.

    Z.B. ein Berg Level Element, mit einem See Level Element + Spieler Siedlung Level Element usw.


    So wie früher die Level zufällig erzeugt wurden.


    Danke für eure Infos

  • Das ganze über den LevelNamen laufen zu lassen ist schwierig da man jede Veränderung separat mitteilen muss. Also wird der LevelName geändert, muss man es händisch auch in der Bezeichnung tun wo man den LevelName abruft/verwendet.


    Wird das Level als Level in der Struct gespeichert wird dieses auch automatisch mit dem Levelnamen angepasst/verändert. Leider kann man das Level nicht im Struct speichern was komisch ist.


    Ich benötigte das für einen Level Teleporter im Spiel bei dem man dynamisch die Level auswählen kann (ohne diese vorher zu definieren zu müssen).

    Würde man das über LevelNamen machen wird das ganze sehr kompliziert.

    • Offizieller Beitrag

    Wenn ich das Problem richtig verstehe: Wieso löst du das nicht über das Levelstraming ?

    Dein "Level1" ist ein Sublevel, begibt sich der Player auf den Teleporter, wird das nächste "Level2" im Hintergrund geladen. Irgend welche Partikeleffekte oder eine Animation wird abgespielt und das Level2 wird angezeigt.

    Jedes Level hat seine Spawnpunkte wo du den Player hinsetzt.

    Der Vorteil ist so auch, du kannst jedes Sublevel komplett speichern.

    Falls du noch irgend welche Subdinge hast, kannst du du das Sublevel auch in weitere Sublevels aufteilen. zb in Meshes die Veränderbar sind und welche die nicht veränderbar sind.

    Du brauchst auch immer nur das Level mit den veränderbaren Meshes speichern und das Statische Level wo sich nichts ändert einfach aus dem Speicher holen.

    Auch ein Vorteil ist die Reihenfolge: Ich stelle mir folgende Frage: Wenn dein Speichern und dein Laden von deinem Level entsprechend lange geht, und der Multiplayer verändert noch etwas am Level während das Level bereits speichert und läd, hast du Synchronisationsprobleme.


    Lädst du aber hingegen erst das Statische Level, dann setzt du den Player und lädst dann im Nachgang das Multiplayer Level hast schnellere Ladenzeiten weil nicht das ganze Level auf einmal geladen werden muss.

    Das Statische Level kannst du theoretisch vorladen wenn sich der Player dem Teleporter nähert. Das Multiplayer Level, musst du im Nachgang onethefly laden.

  • Sleepy

    Wie genau funktioniert das mit dem Levelstreaming?
    Ich versuche irgendwie das Direct Storage zu integrieren aber kann dazu nicht viel finden, obwohl es von UE5 offiziell bestätigt wurde das die Engine das können wird.

    Damit soll das Level laden usw. erheblich schneller gehen.


    Mir geht es um folgendes.


    Spieler A befindet sich in Level 1 und kann dort ein Reiseportal erstellen welches in Level 2 führt, eben an einen Punkt seiner Wahl (hat diesen Ort vorher markiert, entsprechend mit Vektor Daten).


    Spieler B kann dieses Portal in Level 1 oder 2 umändern damit dieses entsprechend nach Level 3 führt, zu einem Punkt seiner Wahl.


    Also das ganze soll komplett frei nutzbar sein ohne das es dafür fest vorgelegte Punkte gibt an die man immer wieder raus kommt.


    Ist der Zielreisepunkt nicht zugänglich (da überbaut oder sonstiges) kommt entsprechend eine Meldung das dass Reisen nicht möglich ist und eine Alternative gefunden werden muss. Das alles im Live Betrieb.




    Ich möchte gerne eine riesige Open World machen, aber vorerst würde ich das gerne in die Level unterteilen, um mir einerseits etwas Arbeit zu sparen und um auch bessere Ergebnisse zu erzählen. Vor allem wenn sich in dem Level viele Dinge verändern.

    Dazu benötigte ich trotzdem so ein System um die Spieler auf eine Art Schatzsuche zu schicken, also ein abgeschottetes Level.




    Derzeit habe ich ein seltsames Problem mit dem Teleporter.

    Im Widget kann ich ein Häkchen setzen ob es sich um einen Welt oder Gebiets Teleporter handelt. Dies muss über den Server laufen.


    Also muss ich vom Widget -> Custom Event bei Teleporter -> Custom Event über MyCharacter -> Custom Event zu Teleporter damit das auf dem Server überhaupt ankommt.

    Reise ich durch das Portal verliere ich auf der anderen Seite in dem Level den PlayerController :(


    Wie kann man das lösen?

    • Offizieller Beitrag

    Wie genau funktioniert das mit dem Levelstreaming?

    Das Levelstreaming kannst du dir wie Photoshop Layer vorstellen. (Falls du Photoshop kennst)

    Es gibt ein Mainlevel, und in dieses Mainlevel können Sublevels geladen werden.


    HIer mal ein simples Beispiel fürs Verständniss:


    1. Du startet dein Spiel.

    2.Das Mainlevel wird geladen. Das Mainlevel ist ein Leeres Level ohne Inhalt (Komplett leer)

    3.Nun lädst du das Menü als Sublevel ins Mainlevel. Während sich der Player im Menü aufhält, wird im Hintergrund bereits das 1. Level vorgeladen.

    (Du kannst ein Level laden und du kannst das Level anzeigen das ist ein Unterschied) Du lädst zuerst, und kannst es anzeigen wann immer du willst)

    4.Drückt der Player auf Start wird mit einem Bums das ganze Level anzeigt. (Sofern es im Hintergrund komplett geladen wurde und sich im Speicher befindet)


    Wenn du das so aufbaust, hast du im grunde nur noch ein gefühltes Level da im grunde nur der Inhalt des Mainlevels durch laden verschiedener Sublevels ausgetauscht wird.

    Die best practice kann ich dir auch nicht sagen aber im grunde könnte ich mir vorstellen, dass jeder Player sein eigenen Sublevel hat und die Veränderungen jedes Players dort gespeichert werden. Vielleicht auch einfach in einem Array (Position, Rotation und Scale, Farbe oder Material usw)


    Wenn du jetzt gespawnt wirst, prüfst nachdem das Statische Level geladen wurde wo alles drin ist was vom PLayer nicht verändert werden kann. Welche Player in deiner Umgebung sind und erstellst eine Liste wo Spieler nach der Range zu dir sortiert sind.

    Nun lädst du alle Sublevels dieser Liste in Reihenfolge. Somit werden Änderungen am Level in deiner Nähe zuerst geladen.

    Hat in deiner Abwesendheit jemand eine Tasse wo anderst plaziert, muss dein User diese Änderungen übernehmen da ja diese Änderungen in deiner Abwesendheit passiert sind.

    Somit Synronisieren sich alle Spieler die Joinen mit den Spieler die sich im Spiel befinden. Verlässt der letzte Spieler das spiel, kannst du das Sublevel im Main oder einem extra Sicherungs Sublevel speichern. Der letzte Spieler verlässt das Level, und der Server speichert das Level vom letzten Player weg auch wenn dieser schon gar nicht mehr im Spiel ist.


    Ich denke dass in Prioritäten und Sublevels aufzuteilen, spart dir eine menge Lade und auch Speicher Zeit.


    Wenn jeder Spieler immer das ganze Level laden muss, ist denke ich ein Horror zumal das ganze Level dann auch übers Internet übertragen werden muss. (mal eben kurz paar GB als Level zu laden)


    Du teilst auf in:


    1.Was ist persistent ? (Bäume, Felsen etc) (dein persistent Level)

    2. Jeder Player oder Veränderungen (als Level Sublevel)

    3.Menü (Ist ein Sublevel)

    4.Auch weitere Bereiche könnten Sublevels sein. zb nur Häuser oder nur Folliage etc

    5.Du kannst Meshes als Subleven auch erst in einer bestimmten LOD Stufe laden und erst dann nach der Distance gehen und die HPs in naher Umgebung laden.


    Wichtig ist auch das du verstehst:


    1.Du kannst ein Sublevel jederzeit im Hintergrund laden.

    2.Dieses Level kannst du jederzeit anzeigen.

    3.Du kannst das Level jederzeit ausblenden. (Es bleibt aber im Speicher)

    4.Du kannst ein Level jederzeit Schließen. (Damit fliegt es aus dem Speicher und muss neu geladen werden)

    5.Du kannst das ganze Level Laden oder speichern. (Mit Mann und Maus)



    Du kannst die aber auch mal das World Partition Feature anschauen das in UE5 neu dazu gekommen ist. Ich kann dir nicht sagen das World Partition Feature das Levelstreaming ersetzen wird oder ob beides zwei unterschiedliche paar Schuhe sind.

    Der Vorteil beim World Partition Feature ist, das jedes Level als extra Datei gespeichert wird. Das heißt das jeder Entwickler kann an seinem Level arbeiten. Gleichzeitig während andere Entwickler an einem anderen Level arbeiten.

    So kann einer nur die Bäume bearbeiten und jemand anderer schraubt an den Häusern herum. (Das ist die grobe Idee dabei)

    Wie du die Level laden bzw speichern kannst, kann ich dir nicht genau sagen.

  • Sleepy

    Danke für die Infos!

    Ich muss das mal kurz schilder wie ich mir das bisher vorgestellt habe, dann kannst du oder jemand anderes, mir eher sagen wie ich das ganze am besten anwenden kann. Ob mit Level Streaming hin oder her.


    Habe es mir so vorgestellt.

    Alles mit Multiplayer! Also wie ein MMO.

    1. Spieler startet Spiel und landet automatisch auf einer kleinen Hauptinsel (Startgebiet), dort gibt es auch Tutorials die man immer wieder nutzen kann. Zugleich kann man die Startinsel (mit Haus) ausbauen, erweitern usw. Sich also in dem Startgebiet gemütlich machen.


    2. Von der Startinsel führt ein Portal weg. Läuft man durch das Portal bezahlt man für den Spieltag.

    Das Portal führt zum letzten Punkt an dem man war (Z.B. in der Stadt, oder im Wald, also man muss sich an ein Bett binden (Schlafsack in der Wildnis).) dort startet man in die Welt und von da an erlebt man seine Abenteuer.


    3. Es gibt weitere Portale (ab Punkt 2.) die zu weiteren Gebieten führen in der man diverse Dinge tun kann.


    Es soll also das Gefühl erscheinen als ob das alles eine Open World ist, ohne das dies in erster Linie ist (da ich noch zu klein bin und das alles so nicht schaffe). Irgendwann sollen die Welten größer werden und mit mehr Inhalten gefüllt werden.


    WICHTIG!
    Alles in den Leveln soll veränderbar sein. Man kann Gegenstände (Gebäude usw.) auf den Boden legen und die bleiben dort persistent, bis diese wieder verändert werden können.


    Bis jetzt fehlt mir noch eine Funktion wie ich Dinge im Level abspeichern kann. Wenn da jemand eine Idee dazu hat wie man das abspeichern kann?
    Denn damit könnte ich auch testen inwieweit das ganze mit dem Level Streaming usw. allgemein funktioniert (ob die Datenmengen zu groß werden, oder die Performance leidet usw.).


    Vielleicht wenn ich sehe wie man Dinge abspeichert, kann ich vom Ende zum Anfang kommen (also wie man die Level vernetzt/abruft/streamt usw.).


    Kann sein das Level Streaming super ist, aber wenn die Speicherung von Daten darin zu umständlich ist (weil das ganze nur statisch sein darf) wäre das nicht gut.


    Wisst ihr wie ich das meine?

    • Offizieller Beitrag

    Kann sein das Level Streaming super ist, aber wenn die Speicherung von Daten darin zu umständlich ist (weil das ganze nur statisch sein darf) wäre das nicht gut.

    Also das mit Levelstreaming zu machen, ist mit Sicherheit kein Fehler mal unabhängig davon ob es am Schluss so funktioniert wie du es dir vorstellst.


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    2. Von der Startinsel führt ein Portal weg. Läuft man durch das Portal bezahlt man für den Spieltag.

    Ja das könnte technisch so sein: Du betritts eine Triggerbox, das andere Level wird geladen! Du kommst in die Mitte der Triggerbox, wo sich das Portal befindet und du betrittst eine zweite Triggerbox: Das Level in dem du dich befindest wird ausgeblendet und das neue Level das zwischenzeitlich vollständig geladen ist, wird eingeblendet. Das würde dann vermutlich auch relativ flott passieren.


    Ich denke das wäre perfekt für deine zwecke und auf jedenfall besser als ein kompletter Levelwechsel oder wie auch immer du das umsetzten wolltest.


    Du kannst ja auch einfach mal per Shortcut das Level aus und einblenden machen und testen wie performant das ist. Ob das dann letztlich über eine Triggerbox oder einem Key oder der Collision zwischen Charakter und Portal ausgelöst wird, spielt keine Rolle.

    Wie gesagt ich denke das geht Onethefly. Vielleicht musst du sogar noch nen Delay einbauen, damit der Portalwechsel nicht zu kurz wird.


    Zum Ein und ausblenden, musst du dir halt auch überlegen ob du die Levels auch aus dem speicher wirfst.



    Was vielleicht auch möglich wäre aber ziemlich advanced wäre, dass du durch das Portal die andere Welt sehen kannst. Der Shader müsste dann im Grunde einen Teil des anderes Levels durch das Portal hindurch anzeigen. Das ist sicherlich auch ein Vorteil wenn alles im selben Level passiert.


    Das speichern des Levels kannst du dann auch direkt mal testen.


    Wenn dus ausprobiert bekommst du das selber raus garantiert ist wirklich keine Rarketenwissenschaft und hört sich komplizierter an wie es ist.

  • Genau das wollte ich machen, dass man durch das Portal die andere Welt sieht (um sich auch optisch als Spieler darüber besser orientieren zu können).


    Werde es mir genauer angucken.


    Hatte jetzt ein schweres Problem mit UE 5.1.1 und DLSS gehabt (endlich gefixt, siehe Nividia Homepage (https://developer.nvidia.com/rtx/dlss/get-started#ue-version) mit den neuen Treiber.)



    Kann mir bitte jemand erklären wie man im Multiplayer in einem Level einen Spielmodus startet (z.B. Burg Belagerung usw.)?

    Also wie startet man so etwas, wobei da die Frage ist ob das direkt vom Spieler aus gestartet wird oder wie kann ich live im Spiel solche Events erzeugen? Muss das nur über Collision Boxes gehen (wenn man das Gebiet betritt startet das Event?).


    Wie genau macht man das und vor allem wie verhält es sich mit den NPCs usw.?


    Eine weitere Sache.

    Wie und wo genau kann ich Gegenstände in der Welt dynamisch Speichern?

    Also ich werfe aus dem Rucksack ein Schwert zu Boden und es soll dort auch liegen bleiben (bis es verschwindet "Destroy Actor" nach einer gewissen Zeit) oder es aufgehoben wird.


    Dann schaue ich das ich die ganzen Dinge miteinander kombiniere und mal sehen kann wie überhaupt die Performance ist.

    • Offizieller Beitrag

    Kann mir bitte jemand erklären wie man im Multiplayer in einem Level einen Spielmodus startet (z.B. Burg Belagerung usw.)?

    Also wie startet man so etwas, wobei da die Frage ist ob das direkt vom Spieler aus gestartet wird oder wie kann ich live im Spiel solche Events erzeugen? Muss das nur über Collision Boxes gehen (wenn man das Gebiet betritt startet das Event?).


    Wie genau macht man das und vor allem wie verhält es sich mit den NPCs usw.?

    Ich bin mir nicht sicher ob ich deine Frage richtige verstanden habe weil du die Frage ja eigentlich selber schon beantwortet hast


    wie kann ich live im Spiel solche Events erzeugen?

    Hättest du diesen Satz nicht geschrieben wäre meine kurz antwort gewesen: Durch Events :)

    Ich gehe jetzt mal davon aus dass du nicht weißt was ein Event ist, den Events gibt es ja unterschiedliche


    Bei Event Beginn Play, würde deine Burg Belagerung direkt beim Start beginnen. Dass möchtest du vermutlich nicht ^^

    Du kannst aber zb durch Eventplay zu beginn einen Timer anfangen lassen zu zählen und deine Belagerung nach 5 min starten.

    Du kannst dem Spieler den Timer entweder anzeigen lassen, oder ihn im Hintergrund zählen lassen.


    Du könntest auch Custom Events verwenden. Ein Custom event, ist ein Event der am Schluss von einem Blueprint ausgelöst wird

    sofern der Schluss erreicht wird.



    Hier siehst du dass oben irgend welche dinge passieren, der Branch wird auf false aufgelöst und dann wir das My Custom Event gestartet. Ist der Boolean auf false, gehts los.

    Es startet der Event unten Rechts und ein Printstring wird ausgegeben.

    Ist der Boolean nicht erfüllt, wird in diesem Fall der Text nicht angezeigt.




    Es gibt viele Events mit denen man sowas umsetzen könnte die Frag was hast du genau vor und wie hast du es vor?


    Eine weitere Sache.

    Wie und wo genau kann ich Gegenstände in der Welt dynamisch Speichern?

    Also ich werfe aus dem Rucksack ein Schwert zu Boden und es soll dort auch liegen bleiben (bis es verschwindet "Destroy Actor" nach einer gewissen Zeit) oder es aufgehoben wird.

    Keine Ahnung wie viele Spieler nachher auf deiner Map sind. Ich weiß auch nicht wie viele Objekte im schlimmsten Fall weggeworfen werden können. Bei manchen spielen hat man ja auch einen Stapel von 500 Stein. Ich könnte ja jeden Stein an einer anderen Stelle ins Level werfen und somit müssten 500 Objekte gespeichert bzw gespawnt werden.


    Mit dem Gedanken das Objekte die vom Player nicht gesehen werden eh nicht konstant gezeigt werden müssen. Könntest du doch Objekte einfach nur anzeigen wenn der Player in der Nähe ist.

    Sprich:

    Spieler schmeißt das Objekt weg, das Objekt wir mit einer unsichtbaren Trigerbox ablegt. Die Range der Triggerbox könntest du beliebig einstellen. Das Objekt bleibt liegen, solange sich der Spieler in der Triggerbox befindet, verlässt der Spieler die Triggerbox, wird die ID des Objekte (zb ein Schwert) zusammen mit den Transforms Position, Rotation in einem Array gespeichert und das Mesh wird entfernt. Die Triggerbox bleibt.

    Kommt der Spieler wieder in die Triggerbox, wird das Objekt wieder angezeigt und mit den selben Transform gespawnt wie es beim Verlassen des spielers aus der Triggerbox gespeichert wurde.


    Mal als Gedankenspiel: Nehmen wir an du speicherst die Waffe nachdem sie abgelegt wurde. Du läufst weg und kommst erst später wieder. In der Zeit wo du weg bist, schießt ein anderer Spieler auf die Waffe wodurch die in der Position verändert wurde und zwar ohne das ein Spieler in der Nähe war oder der Spieler die Waffe aufgehoben hat. Auch könnte jemand mit einem Fahrzeug darüber fahren.

    Sonst könnte es sein, das ein anderer Spieler die Waffe irgend wo anderst hin bewegt auf welche weise auch immer und deine Spawn Position nicht mehr Synchron mit der Postion des anderen spielers ist, weil er die Waffe bewegt hat ohne sie aufzuheben.
    Daher die Idee mit der Triggerbox und der ID wodurch die die Transforms immer aktuell halten kannst und du immer genau dass Schwert wieder findest.


    Die Position von Objekten wäre in dem Fall immer änderbar solange ein Spieler in der Nähe ist. Du könntest ein Schwer zb auch eine Schlucht runter werfen und dann schnell losrennen. Würdest du die Triggerbox verlassen, bevor das Schwer auf dem Boden aufgekommen wäre, würde das Objekt quasi in der Luft gespeichert werden. Du solltest dem Objekt also auch immer eine gewisse Zeit geben um zb auf Physik reagieren zu können und zb nicht einfach das Objekt wegwerfen und 1 Sekunde späte die Position speichern. Das musst du aber alles ausprobieren und an deine Bedürfnisse anpassen.


    EDIT::

    Gleichzeitig könntest du wenn der Player das Schwer wegwirft, erst die Triggerbox spawnen, dann prüfen wie viele andere Triggerboxen die Triggerbox berührt und somit weiß du, wie viele Objekte weggeworfen wurden bzw in der Nähe sind. Wird eine bestimmte Zahl übertroffen, erlaubst du das wegwerfen nicht, damit die Performance nicht in den Keller geht. zb bei 1000 weggeworfenen Schwerter ^^ Oder du löscht die letzten Objekte so das sich immer maximal 1000 Schwerter in der Triggerbox befinden. Gleichzeitig kannst du zb auch die Entfernung zu bestimmten Objekten anzeigen lassen. Man ist gestoben und hat den Rucksack verloren. Der Rucksack ist 1000 Meter weg. Das ist nicht die Position des Rucksacks sondern der Triggerbox und das Mesh wird erst gespawn wenn du die Triggerbox betrittst.

    So könnte ich mir das vorstellen. (Lieber 1000 Triggerboxen als 1000 Meshes)


    BTW; Die Größe der Triggerbox könntest du zb in einem Datatable speichern. Somit kannst du durch das ändern einer Zahl die Range ALLER Triggerboxen verändern. Ist vermutlich einfacher fürs balancing.

  • Ich meinte nicht wie man ein Event tatsächlich startet/macht (das weiss ich schon), sondern wie man ein Event und alles was dazu gehört beginnt.


    Damit meine ich, wenn genügend Spieler vorhanden sind und sich gemeinsam für einen Schlachtfeld anmelden (Burg Belagerung). Wie genau macht man das mit "Game Mode" usw.


    Also ab wann (nicht der Zeitpunkt sondern allgemein) löst man das aus. Wie wird das vom Server ausgelöst und nicht vom Spieler selber? Denn bisher werden alle Dinge vom Spieler ausgelöst. Einen Server gibt es irgendwie nicht. Habe bisher auch keine Server Oberfläche in Unreal Engine gesehen, die ähnlich dem Prinzip wie des MyCharacters (als Oberfläche) dient.


    Für die Gegenstände würde ich ein Objekt Streaming machen, in dem die Sachen herausgestreamt werden wenn nicht benötigt und umgekehrt.

    Die wichtigste Frage von allem, wo wird das ganze Zeug in einem Level abgespeichert?

    Also wo genau?


    Speichert man die im Level Blueprint und dabei in welcher Form als Datei dafür?



    Andere Frage:
    Wie kann man von Level A auf den Inhalt von Level B zugreifen?

    Z.B. möchte ich in Level A einen Teleporter erstellen, der nach Level B geht. Dort muss an der Stelle ein Teleporter erstellt werden damit man wieder zurückreisen kann. Jedoch muss man ja vorher zugriff auf Level B haben in A, damit man durch das Portal das sehen kann wohin man geht. Nicht das auf der anderen Seite nichts ist (z.B. weil man innerhalb eines Berges oder so etwas ist).

  • So viele Fragen! Ich wuerde dir mal das schoene network Compendium ans Herz legen. Von Cedric geschrieben. Mir hat es bei einem Multiplayer Projekt sehr weitergeholfen. Es ist schon wichtig erst mal zu verstehen was genau GameMode, GameState, PlayerState usw sind und warum man was wo an Variablen ablegt. Was ist auf dem Server, was ist auf den Clients und wer kann Infos von wo abgreifen? Es ist zwar in Englisch aber es sind gute Schaubilder drin die mir sehr geholfen haben. Von daher ganz warm empfohlen um etwas Networking Grundlagen aufzusaugen. Manchmal gibt es auch mehrere Wege, nicht immer gibt es ein Richtig oder Falsch. Aber welcher BP wann vorhanden ist und wann verloren geht ist schon echt hilfreich zu wissen um nicht aufs falsche Pferd zu setzen oder sich zu wundern.


    https://cedric-neukirchen.net/Downloads/Compendium/UE4_Network_Compendium_by_Cedric_eXi_Neukirchen.pdf

  • So wie ich es verstanden habe, willst du etwas wie ein MMO machen?


    Wenn dem so ist, dann müssten folgende (und noch mehr) Punkte zum "Speichern" festgelegt werden:


    - alles im allem wäre die Liste dazu seeeehr lange. Aber eine der wichtigsten Fragen ist folgende: wird ein Wert/Zustand/Objekt/etc. für das Gameplay oder für den Spieler selbst gespeichert?


    Z.b. :

    -/ich beende als Spieler das MMO. Jetzt wird dementsprechend gespeichert. (meine Position, Quests usw.) = Playersave


    - ich teleportiere mich von Level A zu Level B. Jetzt befinde ich mich auf einer anderen Map. Die Werte von Level A müssen aber noch verfügbar sein, damit ich "richtig" zurückkommen kann. Schreibt man das alles in eine Struct, leidet die Performance erheblich und führt ziemlich sicher zum Absturz (vor allem wenn die Struct dann nochmals bearbeitet wird) Deshalb würde ich es in ein Save schreiben. Da ist dann alles was ich brauche drinnen und ich greife es nicht mehr an. = Gameplay Save (das muss nach Beenden des Spiels nicht mehr zwingend vorhanden sein)


    Mein Rat wäre also, den Thread hier zu zerlegen. In ein Topic um den es sich allein um Travel handelt, einer in dem es um Instanzierung geht, ein andere behandelt das Speichern usw. Die Themen werden sich zwangsläufig überschneiden. Allerdings halte ich es für nicht sinnvoll alle auf einmal zu behandeln

  • Fuchsnerichen

    Da hast du recht.


    Ja es soll ein MMO werden. Die wichtigsten Dinge und Funktionen sind enthalten. Nun muss ich den letzten Schritt machen damit ich einen Server erstelle auf diesem die Spielwelt ablaufen kann. Sozusagen der Weltenbau + Server Funktion.


    Ich bekomme schon einen Crash to Desktop wenn ich bei 2 Spielern bei Spieler A ein Open Level über den Server durchführe.

    Es gibt unzählige Videos über Singleplayer Projekte aber kaum etwas über den Multiplayer.

  • Die wichtigsten Dinge und Funktionen die schon vorhanden sind, sind auf den Multiplayer ausgerichtet?

    (Run on Server, Mutlicast, Run on Client)


    mit "open level" wirst du leider nicht weit kommen. (Open level trennt die Verbindung (auch vom Host) und verbindet sich neu. Dabei gehen die Daten verloren, niemand weiß mehr wohin und vertschüsst sich (einfach gesagt))

    Du solltest seamless travel aktiviert haben und die node "Execute Console Command" nutzen.

    Dort kannst du mit dem Befehl "servertravel" deine Map ansteuern.

    z.B.: servertravel/"vollständiger Pfad zu deinem Level"/Level01


    Im Hintergrund passiert dann folgendes: Der Server hüpft in das gewählte Level/Map und alle verbundenen Clients folgen. (der Server führt im Hintergrund "clienttravel" durch)


    Ein weiterer Vorteil von seamless travel sind die "persisting actors" - diese können von level zu level weitergetragen werden. (zb. Spieler, Inventaritems, oder in deinem Fall eine Variable die Teleporter vermerkt)


    Leider gibt es einen guten Grund warum es so wenig Multiplayer-Projekte gibt: Sie können unglaublich kompliziert werden

  • Wie kann man einen einzelnen Spieler von Level A auf Level B teleportieren, während zwei Clients aktiv sind und ein anderer Spieler auch zu Level B gelangt in dem der andere Spiel ist?

    Prinzipiell sorgt seamless travel "nur" dafür, dass die Clients nicht die Verbindung zum Host verlieren. Im Fall eines MMO ist der Server ein dedizierter Server und kein Spieler.


    Der Rest kommt auf das Setting an:

    • Wie ist Game State aufgebaut?
    • Wie ist Player State aufgebaut?
    • Verwendet der Server seine eigene Instance?
    • usw.

    Vielleicht helfen dir die Bilder anbei ein wenig weiter.