Unload Stream Level funktioniert nicht

  • Moin,


    bin gerade dabei mein Projekt auf Level Streaming umzubauen, um Ladescreens besser nutzen zu können. Bisher hatte ich es immer mit Open Level genutzt.


    Aktuell sieht es so aus:


    Persistant Level ist leer und lädt beim Spiel-Start direkt das MainMenü-Level.
    Von dort wähle ich über das UI mein Level aus --> Ladescreen (Load Stream Level [Level-1] und Unload Stream Level [MainMenü-Level]) --> Level-1 wird angezeigt mit nem UI mit zwei Buttons (Start) und (Zurück zum Hauptmenü).
    Wenn ich nun direkt ins Hauptmenü zurück möchte, funktioniert es nicht. Bild wird schwarz, flackert etwas und zeigt wieder das UI von Level-1 mit den zwei Buttons an. Klick ich wieder drauf, das selbe wieder...
    Woran könnte das liegen?


  • Woran könnte das liegen?

    Erster Gedanke:


    Dein Current Level wird nicht aktualisiert.


    Lass dir mal current Level rausgeben und Zeitpunkt wann Stream Level Unloaded ist.



    ODER



    Du hast eine automatisierte Mechanik die dein "Current Level" erkennt.


    Jetzt klickst du diesen Button, was passiert:


    Du lädst dein neues Stream Level -> Dieses wird als Current Level gesetzt -> Du holst dein Current Level von der Game Instance und Unloadest das selbige wieder.


    Ergo, du lädst dein Stream Level und Entlädst es sofort wieder.




    Aber ich weiß ja nicht, welche Logik du in deiner Instance hast um Current Level zu setzen.

  • Oh das Current Level habe ich nur in die Game Instance gelegt, weil ich beim Level Streaming über "GetCurrentLevelName" nicht das aktuell geladene Level auslesen konnte... Er gibt mir dabei immer nur den Namen des Pesistant Level aus.
    Ohne Level Streaming war das vorher kein Problem gewesen.
    Ich nutze in den Menüs einige Textboxen und Buttons, die Automatisch den aktuellen Level-Namen auslesen, um ihn als Text anzeigen zu lassen.
    Im oben gezeigten Blueprint könnte ich auch die Game Instance weglassen und im "Unload Level Stream" direkt den LevelNamen angeben, aber das Ergebnis bliebe das gleiche..

  • Ok zwei Ideen:


    - Remove from Parent würde ich nach ganz hinten setzen. Die Klasse wird vllt removet, obwohl sie noch nicht fertig durchgelaufen ist.


    - Unloade mal ganz zu anfang und loade erst danach das stream level. Ich weiß, gegenteiliger effekt, aber trotzdem.


    Desweiteren überprüfe mal deine Events (Beginplays, End Plays etc) die du beim Unloaden der einen Map und beim loaden der anderen Map auslöst.

  • Funktioniert leider auch nicht.


    Desweiteren überprüfe mal deine Events (Beginplays, End Plays etc) die du beim Unloaden der einen Map und beim loaden der anderen Map auslöst.

    Da wüsste ich ehrlich gesagt nicht genau, nach was ich da suchen sollte. Also was Ursachen sein könnten, die es verhindern.


    Hm er scheint das Level gar nicht erst zu laden... Habe nach dem Level Load über "IsLevelLoaded" Target --> GetStreamingLevel (MainMenuMap) ne Abfrage gestartet und sie übern nen Branch und Print String "Ja" oder "Nein" ausgegeben und er sagt immer "Nein". Und das aktuelle Level will er auch nicht "unloaden" dann.

  • Ok, es funktioniert nun Teilweise.


    Ich kann die MainMenuMap laden und auch das Level entladen, jedoch wird mir im MainMenu einfach nur der Himmel angezeigt und nicht mein Hauptmenü.
    Im Debug-Modus wird aber angezeigt, dass er den Level-Blueprint komplett durchläuft beim Laden und somit eigentlich sämtliche Einstellungen auch gesetzt sein sollten.


    Die MainMenuMap beim Spielstart:


    Die MainMenuMap nach dem verlassen des Levels und Rückkehr zur MainMenuMap:


    Den "Blueprint Compiler Error" ignorieren, der kommt erst seit Version 4.19+. Blueprint kompiliert aber erfolgreich.


    Könnte es eventuell am Wechsel zwischen den GameMode liegen? Habe fürs Menü und dem InGame je einen anderen und ich nutze im Menü-GameMode keinen Pawn. Allerdings funktiniert der Wechsel beim ersten Mal (vom Menü ins Level), ja auch ohne Probleme.
    Frage ist, wieso nicht auch bei der Rückkehr?

  • Könnte es eventuell am Wechsel zwischen den GameMode liegen? Habe fürs Menü und dem InGame je einen anderen und ich nutze im Menü-GameMode keinen Pawn. Allerdings funktiniert der Wechsel beim ersten Mal (vom Menü ins Level), ja auch ohne Probleme.


    Frage ist, wieso nicht auch bei der Rückkehr?

    Wenn ich dich richtig verstehe hast du Alle Streaming LEvels in einem Persistent versammelt. Der Gamemode des Persistent wird funktionieren. Ob die anderen funktionieren, bezweifle ich.


    Tipp: Benutze EINEN Game Mode, KEINE Level Blueprints, und wenn du unbedingt einen Smoothen Übergang zwischen Main Menu und deinem Gameplay Level haben willst (Ohne Ladebildschirm),
    brauchst du eigentlich auch kein StreamingLevel für dein Main Menu. Sogesehen brauchst du überhaupt keine Map für dein Main Menu.


    Deine Map ist deine Gameplay Map. Du kannst bei Spielstart einen Pawn possessen (zB auf dein Level gerichtet) und lädst dein Widget.
    Klick auf StartButton und dein Widget wird removed, du lädst vllt dein Gameplay Streaming Level und possessed deinen Gameplay Character.


    Fertig. ^^


    Kein Streaming Level für´s Main Menu, wenn du sowieso Ladebildschirmfrei zwischen Leveln switchen willst.
    Und wenn du doch einen Ladebildschirm haben willst, wozu dann der Aufwand mit Streaming Levels?

  • Jupp, habe alle Streaming Levels im Persistent Level. Allerdings muss ich dazu sagen, dass werden noch ne ganze Menge Level später (50+). Bin da noch nicht fertig und nur am Testen mit 1-2 bisher.


    Also ich hätte schon gerne nen Ladebildschirm zwischen den Leveln, da es sonst zu kleine Freezes bei mir kommt. Zum Beispiel wenn ich den Start-Button drücke. Der bleibt dann nen Moment hängen, solange der Level zum Laden braucht. Finde ich etwas unschön. Ausserdem hätte ich den Ladebildschirm gerne animiert, was ohne Level Streaming aber nicht funktioniert.


    Für mein Main Menu habe ich nicht nur ein Widget, welches angezeigt wird. Im Hintergrund kommt später noch irgendetwas mit rein, ne Landschaft, Umgebung etc. wofür ich dann schon gern ne Extra Map für nützen wollen würde.


    Zum GameMode: Gibt doch in den World Settings den GameMode Override. Damit funktioniert das nicht? Und wieso keine Level Blueprints? Also ich denke nicht, dass ich alles aus den Level Blueprints in den GameMode packen kann. Habe in jedem Level eine unterschiedliche Anzahl an Objekten welche verschoben oder gedreht werden können und dies kann per Knopfdruck auch wieder Rückgängig gemacht werden.
    DIe Anzahl variiert pro Level und die Objekte liste ich dann jeweils im Level-Bluprint auf und spreche sie an.
    Kann schlecht im GameMode aus über 50+ Leveln alles an Objekten des jeweiligen Levels auflisten. Sind zwar die selben Objekte und Teil eines jeweiligen Parents aber.. ja keine Ahnung. Aktuell funktioniert es so, wie es ist und ich weiß nicht, ob ich das nun alles wieder umkrempeln will...

  • Ok, habe eine Lösung gefunden, welche vorerst wohl funktioniert. Ob sie gut ist, müsste jemand anderes entscheiden.
    Und zwar habe ich einen Ladebildschirm als Level! dazwischen geschoben, welches nur ein Widget enthält. Wird dieser Level geladen, erscheint besagtes Ladebildschirm-Widget und er läd gleichzeitig dabei das Hauptmenü-Level und entlädt das vorherige Level im Hintergrund und wenn das fertig ist, wird das Widget entfernt und mein Hauptmenü-Level wird ohne Probleme angezeigt.


    Anscheinend gibt es aktuell Probleme damit, das Hauptmenü-Level direkt nach dem Unload wieder zu laden und korrekt aufzurufen.
    Sprich: "Menü --> Level 1 ---> Menü". Er findet meine Hauptmenü-Camera dann nicht und ersetzt sie automatisch mit einem CameraActor (mit Referenz zum CameraManager), welche natürlich dann zentriert und falsch gesetzt ist.
    Wenn ich ihm aber mehr Zeit gebe, zum Beispiel: "Menü --> Level 1 ---> Level 2 ---> Menü" funktioniert es wieder. Bis dahin scheint das Menü einmal richtig entladen zu sein und kann dann wieder erneut geladen werden.


    Über Meinungen oder anderen, saubereren Lösungen von Euch dazu wäre ich sehr dankbar, oder ob man das durchaus so lassen könnte :)

  • Die sauberste Lösung? Lass die Streaming Level weg, wenn du sowieso nicht Seamless Traveln willst. Die Gameplaymap kann man mit Streaminglevels vollscheissen, aber bei dem MainMenu Flow machst du es dir viel zu kompliziert auf diesem Weg.


    Eine Map für Main Menü und eine Gameplaymap (Der Loadingscreen ist Persistent der Gameplaymap und lädt beim laden die anderen Level).


    Aber mach wie du meinst ^^