Levelübergreifendes Blueprint?

  • Hallo Leute,


    eine Frage, gibt es einen Level übergreifenden Blueprint. Also einen Blueprint, welchen ich wie zB einen Character Controller für alle betreffenden Level einstellen kann. Für andere Level dann vllt einen anderen.


    Es geht darum, dass ich z.B. meinen DayNightCycle und weitere Funktionen die für mehrere Level geschrieben sind, nicht jedes mal im LevelBlueprint copy und pasten möchte.


    Was kann ich da nehmen oder habt ihr eine andere Idee?


    Danke

  • Da gibt es verschiedene Möglichkeiten. Zum Beispiel könntest du dir ein Level Template erstellen. Dann werden die wichtigsten Einstellungen usw. bereits in den Level eingefügt, wenn du einen neuen erstellst.

    Eine andere Möglichkeit wären die Nutzung von Blueprint Function Librarys. Dann kannst du entsprechende Funktionen erstellen und bräuchtest nur ein oder zwei Funktionen in den Levelblueprint packen, um dein DayNigthCycle zu nutzen.

    Wie immer gibt es natürlich auch Kombinationsmöglichkeiten, also Template und FunctionLibrary.

    Externer Inhalt youtu.be
    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.

    • Offizieller Beitrag

    Hey, ich sehe mehrere Möglichkeiten:

    1. Du könntest Gameinstanzen verwenden.

    Eine Gameinstanz ist eine globale Instanz, die während der gesamten Spieldauer besteht und abhängig vom geladenen Level erhalten bleibt.

    Du kannst Variablen und Funktionen in einem Gameinstanz-Blueprint erstellen und von verschiedenen Leveln darauf zugreifen.

    (Video-Link: https://www.youtube.com/watch?v=HpLeyIszAUU)

    1. Eltern-Blueprints und Vererbung:

    Du könntest einen Eltern-Blueprint erstellen, der deine gesamte Logik enthält. Mit einem Kind-Blueprint kannst du dann auf den Eltern-Blueprint zugreifen und die benötigten Informationen verwenden.

    (Hier ist ein Link dazu: https://couchlearn.com/parent-…rints-in-unreal-engine-4/)

    1. Level-Streaming

    In den meisten Fällen würde Level-Streaming bedeuten, dass du zum Beispiel ein leeres Hauptlevel lädst. Beim Spielstart wird in dieses Hauptlevel das Menü geladen. Danach wird das Menü aus dem Hauptlevel entfernt, und das eigentliche Level (z. B. Level 1) wird ins Hauptlevel geladen. Wenn Level 1 abgeschlossen ist, wird wieder ins Hauptlevel geladen. Dies geschieht ohne größere Ladezeiten, da du Level 2 bereits im Hintergrund vorladen kannst, während du dich noch in Level 1 befindest.

    Level-Streaming bedeutet also nicht das klassische "Ich spiele Level 1, dann wechsle ich zu Level 2 und dann zu Level 3." Es geht vielmehr darum, viele Levels in ein einziges Hauptlevel einzubetten. Dies beinhaltet das Laden, Entladen, Anzeigen und Nicht-Anzeigen von Levels.

    Du könntest Sublevels laden, die als Blueprints dienen, die niemals aus dem Hauptlevel entfernt werden und somit immer vorhanden sind. Der Rest könnte im Prinzip ausgetauscht werden.


    Hier ein Link zum einem Video wo es um das Levelstreaming geht.

    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.


    So wie ich das meine, wird dort nicht erklärt aber wenn du Levelstreaming verstanden hast, geht dir vermutlich ein Lich aus.


    Alles Möglichkeiten haben vor und Nachteile und keine Möglichkeit ist besser wie die andere. Es kommt darauf an was du vorhast und wie sich dein Spiel zukünftig entwickelt.

  • Vielen Dank, Sleppy für deine ausführlichen Tipps. Mit Level Streaming habe ich mich noch gar nicht befasst. Ich fange gerade erst an, mache aber jeden Tag Fortschritte. Level streaming finde ich spannend, da ich damit wenn ich dich richtig verstehe auch ein aktuell geöffnetes Level, durch nach Bedingungen ausgewählte "Level" erweitern kann... Also die Karte wird größer oder sowas... Ich les mich mal ein ins Thema. Danke

    • Offizieller Beitrag
    • Hilfreich

    Ja und Nein.

    Man muss, glaube ich, darauf achten, dass man keine falschen Vorstellungen bekommt.

    Beim Levelstreaming geht es um die Verwaltung von Levels oder Sublevels und dem persistenten Level.

    Ich gebe dir zwei Beispiele, damit du es besser verstehst. Vergiss jedoch für einen Moment, was du unter einem Level verstehst.

    Beispiel 1:

    1. Das Persistent Level ist sozusagen ein leerer Raum, in dem sich nichts befindet. (Ein leeres Hauptlevel)
    2. In dieses Hauptlevel kannst du nun Sublevels laden.
    3. Ein Sublevel könnte beispielsweise ein Level sein, in dem sich NUR Häuser befinden. Ein weiteres Sublevel könnten nur Bäume sein.
    4. Du könntest auch verschiedene Stadteile einer Stadt als separate Levels erstellen.
    5. Bei Sublevels gibt es quasi 4 Stufen:

    Stufe 1: Das Level wird geladen, aber nicht angezeigt. Das gesamte Level wird im Speicher vorab geladen. Es wird jedoch nicht angezeigt. Das Sublevel wird im Hintergrund geladen, ohne dass du etwas davon mitbekommst.

    Stufe 2: Das Level wird angezeigt, sobald es geladen ist. Du lädst das Sublevel, bevor du es benötigst, um es dann auf einmal anzuzeigen. (Dieses anzeigen geschieht sofern das Level vorgeladen ist SOFORT und ohne Ladezeit)

    Stufe 3: Wenn du dich aus dem Bereich entfernst, wird das Sublevel wieder ausgeblendet. Es befindet sich jedoch noch im Speicher und steht bereit, wenn es erneut benötigt wird.

    Stufe 4: Das Sublevel wird komplett aus dem Speicher entfernt. (Dann muss es erneut geladen werden, bevor es angezeigt wird.) Dies könnte zum Beispiel geschehen, wenn du die Stadt verlässt und eine gewisse Entfernung von ihr erreicht hast. (Der Speicher wird hierdurch wieder frei)


    Beispiel 2:

    Beispiel 2 anhand eines Sidescrollers:

    1. Du lädst das leere Level (Persistent Level).
    2. Direkt danach lädst du das Menü in das Persistent Level. (Visuell sieht es so aus, als ob NUR das Menü geladen wurde.)
    3. Während du dich im Menü-Sublevel befindest, wird im Hintergrund bereits Level 1 des Sidescrollers geladen.
    4. Kurz bevor du das Ende des Sidescrollers Level1 erreichst, beginnt der PC bereits, Level 2 zu laden.
    5. Wenn du das Ende erreichst, wird Level 1 ausgeblendet und das vorab geladene Level 2 eingeblendet.

    Dies geschieht ohne Ladezeiten und fließend.

    Diese beiden Möglichkeiten können beim Levelstreaming verwendet werden. Gelegentlich werden bestimmte Sublevels bestimmten Entwicklern zugeordnet. So arbeitet beispielsweise der Entwickler, der für die Gebäude zuständig ist, nur am Gebäude-Sublevel.


    Neu bei UE5 sind nun die World Partitions. Hierbei handelt es sich um eine tatsächliche Aufteilung eines Unreal-Projekts in viele kleine Projekte. Dadurch kann jeder Entwickler in seiner eigenen Umgebung arbeiten, ohne sich gegenseitig zu beeinträchtigen. Das nur am Rande erwähnt.


    Nun aber zurück zum eigentlichen Thema. Meine Idee war es, die wichtigsten Blueprints, die man immer benötigt, in einem Sublevel zu platzieren und dieses Sublevel in das Persistent Level zu laden. Alles andere lädst du ebenfalls als Sublevel in das Persistent Level. Der Unterschied besteht darin, dass diese Sublevels auch wieder entfernt werden können. Dadurch wären deine Blueprint-Sublevels (sozusagen omnipräsent) immer verfügbar und in allen anderen Sublevels präsent. Das war mein Gedanke in Bezug auf die Sublevels.

  • Das klingt alles sehr spannend. Mir stellen sich jetzt natürlich Fragen, da ich werde ich mich noch einlesen und sehen ob ich Tutorials finde um das auszuprobieren. Um das Gespräch hier aber ein wenig weiter zu führen, gerne eine der Fragen die ich jetzt habe:


    Das PersistentLevel (in dem sich wie ich verstanden habe auch kein Landscape oder ähnliches, also wirklich nichts befindet) ist im Prinzip auch nicht in seiner Größe beschränkt. Landscape kommt erst mit einem Sublevel (genauso wie Häuser oder Bäume mit anderen SL etc.).


    In wieweit sind diese Sublevel beeinflussbar/manipulierbar, bevor sie tatsächlich in das PersistentLevel geladen und angezeigt werden. Kann beispielsweise das Landscape durch Parameter verformt werden? Kann die Position des Landscape verändert werden?


    Danke @Sleppy für die schönen Denkanstöße

    • Offizieller Beitrag

    Das PersistentLevel (in dem sich wie ich verstanden habe auch kein Landscape oder ähnliches, also wirklich nichts befindet) ist im Prinzip auch nicht in seiner Größe beschränkt. Landscape kommt erst mit einem Sublevel (genauso wie Häuser oder Bäume mit anderen SL etc.).

    Ne das PersistentLevel ist so wie das Weltall :) Unendlich. Die Idee ist eben die Sublevels in PersistentLevel zu laden.


    Stell dir die PersitentLevel wie eine Bühne vor bei der ein Stück gezeigt wird.
    Auf diese Bühne werden immer andere Szenarien geschoben . Karibik, Wald, Stadt usw.

    Jedes dieser Szenarien ist ein Sublevel. Es gibt nur eine Bühne und das ist das PersistentLevel.


    Du könntest auch Meshes in das Persientlevel machen und Sublevels dazu laden. Das könnte unter bestimmten umständen auch Sinn ergeben.

    zb alle Straßen könnten sich im Persitentlevel befinden und die Häuser werden als Sublevel dazu geladen.

    Das schöne ist auch, du kannst Sublevels ausblenden oder nur ein bestimmtes Sublevel einblenden.


    Vergleichbar im Protoshop Layer.


    In wieweit sind diese Sublevel beeinflussbar/manipulierbar, bevor sie tatsächlich in das PersistentLevel geladen und angezeigt werden. Kann beispielsweise das Landscape durch Parameter verformt werden? Kann die Position des Landscape verändert werden?

    Das ist eine gute Frage weiß ich ehrlich gesagt nicht.


    Wie oben berichtet, werden die Sublevels ja geladen aber nicht angezeigt. Ich könnte mir vorstellen, dass du darauf zugreifen kannst und sie verändern kannst sobald sie geladen sind.


    Ich kenne dein Gedanke nicht aber wäre nicht auch möglich das Level zu laden, anzuzeigen und dann direkt zu Manipulieren ?


    Im Normalfall startest du ja nicht in einem leeren Raum und lädst dann die Sublevels und siehst dass sich dinge am Level verändern.

    Nur das Terrain könnte auch auf einem Sublevel liegen.

  • Ich meine sobald du auch ein Sublevel lädst triggern zB. erst die BeginPlay Events für das Sublevel.
    Du kannst also zB. wenn dein Landscape in einem Sublevel ist und es hinein lädst, auch erstmal bestimmte Parameter setzen bevor es dann angezeigt wird.


    Wenn du weißt wie man per Blueprints das Landscape verändern kann. Dann kannst du diese Funktionen ja nach dem Laden durchführen und danach erst anzeigen lassen.

  • Wenn du weißt wie man per Blueprints das Landscape verändern kann. Dann kannst du diese Funktionen ja nach dem Laden durchführen und danach erst anzeigen lassen.

    Danke, das ist genau das worauf ich hinaus wollte. Damit wird es auch möglich (denke ich) prozedural, mit Werten/Parametern die im laufendem Level gesetzt oder manipuliert wurden, das Landscape des Sublevels zu "formen". Beispielsweise, wie stark die Landmass durch eine Textur - in deren dunklen Bereichen nach oben und in den hellen nach unten gezogen wird. Als ganz simples Beispiel.


    Wenn man also die Position des Landscape (Sublevel) im PersistentLevel dadurch auch verändern kann, ist es möglich eine Art DungenCrawler aufzubauen der sich wie ein Puzzle spielt und immer etwas verschieden ist (oder sehr). Schöne Idee.