Levels Laden und Loading Screen

  • Hallo Community.

    Ich frage mich nun, wie man am besten beim Laden von Leveln vorgeht.

    Dazu habe ich mir zwar einige Videos angeschaut. Aber werde noch nicht ganz schlau draus.


    Bei meinem Projekt besteht die Map nur aus einem riesigen Gebäudekomplex mit Außenanlage. Also keine Open World etc. Also nur ein kleines Landscape und darauf das Gebäude wo sich der ganze Spaß abspielen soll.

    Mein Kenntnis vorher, oder bis jetzt war aber! Ich habe eine Map, sagen wir mal MainMap, was meine eigentliche Spielwelt ist.
    Dann habe ich eine extra Map nur für das Main Menu? Welche dann beim starten des Spiels aufgerufen wird und durch das drücken von "Spiel starten" oder das Laden vom Spielstand wird einfach durch "open Level" das eigentliche Spiellevel geladen.


    Ganz so simpel funktioniert es aber bei größeren Maps nicht oder? Denn durch "Open Level" weiß ich auch nicht, wann den das Level überhaupt fertig geladen ist. Für Loading Screen zum Beispiel.


    Dann bin ich jetzt auf das Level Streaming gestoßen. Erst dachte ich, dass ist nur dafür da, um auf einer Map bestimmte Bereich zu separieren. Als sehr simples Beispiel ein Haus, wo jeder Raum ein eigenes Sub-Level ist.
    Aber dann habe ich auch irgendwie heraus gelesen, dass man dort auch das Hauptmenu laufen lässt.

    Also im meinem Falle:
    Es gibt ein permanentes Hauptlevel? Dann das Hauptmenu und die eigentliche Spielmap als Sublevels?? Habe ich das so richtig verstanden?


    Wenn das ganze so laufen kann, wozu brauch man dann noch die "open Level" Funktion? Welche viele für ihre "simplen Beispiel-Tutorials" benutzen.



    Und was mich halt noch bei der Denkweise durcheinander bringt. Ich habe mal gelesen, dass Sublevels auch dazu genutzt werden um zB. bei einem Raum die Beleuchtung vom Raum in ein extra Level zu stecken. Damit falls mehrere Leute dran arbeiten, einer in dem Level arbeiten kann für die Beleuchtung und der anderen am eigentlichen Level selbst.
    Oder verwechsle ich da gewaltig etwas?


    Danke fürs durchlesen und sry für so viel Text!
    Aber ich muss einfach mit jemanden darüber schreiben! :D

  • Oh, das sind einfach ganz viele Fragen auf einmal ^^
    Im Prinzip gibt es da auch kein richtig und falsch, sondern es kommt immer darauf an.

    Grundsätzlich gibt es ein Main-Level und beliebig viele Sublevel. Die sublevel haben mehrere Aufgaben.


    1. Performance sparen, da nur nötiges geladen wird. Wenn du auf dem Dachboden bist, muss der Keller eines Hauses nicht umbedingt sichtbar sein und außerdem müssen alle Ratten, die im Keller rumlaufen nicht berechnet werden.

    2. bessere Aufteilung (z.B. ein eigenes Sublevel nur für Items/Light oder Collision Meshes oder anderes. Gerade bei großen Projekten sinnvoll)
    Das führt dann auch dazu, das verschiedene Leute an verschiedenen SubLeveln gleichzeitig arbeiten können ohne Überschneidung.


    Das ganze kann aber auch kompliziert werden, daher muss man gut planen, wenn man Sublevel benutzt. Stell dir vor du hast eine Tür in einem Sublevel und einen Schalter um die Tür zu öffnen im anderen Sublevel. Wie stellst du jetzt sicher, das die Tür zum Beispiel aufgeht, wenn das Sublevel und damit die Tür im moment garnicht existiert ;)
    Daher ist es gängig, dass man solche Sachen im Main-Level platziert, um es einfach zu machen. Ansonsten muss beim Laden des Sublevels erstmal der Status der Tür irgendwo abgefragt werden.

    Die OpenLevel funktion ist immernoch wichtig um ein neues Main Level zu laden.

    Du kannst dein Hauptmenü auch einfach als Widget anzeigen, unabhängig in welchem Level du bist, aber Ich denke die Aufteilung macht dennoch Sinn.

    Wenn du aus dem Hauptmenü ein Spiel startest, und dazu das Level wechselst, wird alles neu erzeugt. Wenn dein Hauptmenü ein teil eines immer persistenten Levels ist, könnte es Sachen komplizierter machen, wenn du zum Beispiel ein neues Spiel startest, müsste erstmal das Level wieder aufgeräumt werden.


    Der Ladebildschirm ist so eine Sache. Es gibt da sicherlich eine Möglichkeit rauszufinden, wann etwas geladen ist, indem man irgendein Event benutzt. Eventuell gibt es ein "OnFullyLoaded" Event oder sowas bei Level und Sublevel, ansonsten macht es auch Begin Play oder ein Actor, der einmal tickt, das Event auslöst, das alles geladen ist, und dann verschwindet, oder ähnliche pfuschereien ;) ;)

  • Dann bin ich jetzt auf das Level Streaming gestoßen. Erst dachte ich, dass ist nur dafür da, um auf einer Map bestimmte Bereich zu separieren. Als sehr simples Beispiel ein Haus, wo jeder Raum ein eigenes Sub-Level ist.
    Aber dann habe ich auch irgendwie heraus gelesen, dass man dort auch das Hauptmenu laufen lässt.

    Also im meinem Falle:
    Es gibt ein permanentes Hauptlevel? Dann das Hauptmenu und die eigentliche Spielmap als Sublevels?? Habe ich das so richtig verstanden?

    Wenn du es mal genau überdenkst, auch in Bezug auf deinen Absatz vorher, ist ja kein Unterschied zwischen einem Mainlevel und zum Beispiel MainMenüLevel als Level bzw. Sublevel.



    Wie du sie nun lädst, das bleibt am Ende dir überlassen. Die "alte" Methode oder eben halt per Levelstream.



    UE5 treibt das Ganze noch ein wenig weiter. Ich denke, das meinst du dann auch mit verschiedenen Leuten, die an einem Level arbeiten. Zumindest habe ich mal ein Tutorial gesehen, wo genau das so ausgeführt wurde. Da er aber nicht gerade ein geduldiger Tutorialsprecher war, habe ich da jetzt auch nicht so ganz durchgeblickt, was er jetzt von mir wollte.