Jump to content
Unity Insider Forum

Szenen additiv laden - Erklärung


Garzec

Recommended Posts

Hallo,

für das Hauptmenü und Ingamemenü wollte ich ein zusätzliches Optionsmenü erstellen. Da die Optionen ja gleich sein sollen, dachte ich, nehme ich einfach eine extra Szene und rufe von beiden Menüs diese Szene auf. Würde ich Ingame einen Optionsdialog aufrufen, müsste ich ja zwei Optionen "entwickeln". Da durch das Laden der Optionen ja alles zerstört wird, wäre dies Ingame natürlich sehr ungünstig. 

Laut Google kann man Szenen additiv laden. Was verbirgt sich genau dahinter?

Die Optionen sollen ja beim "Zurück"- Button folgendes tun

- wenn die vorherige Szene das Hauptmenü war, geh dorthin zurück

- wenn die vorherige Szene das Spiel war, kehre zum Spiel zurück

Kann ich also beim Laden meines Spiels die Optionsszene ZUSÄTZLICH laden, damit, wenn ich in die Optionen gehe und zurück gehe, die Spielszene nicht zerstört wurde? Also kann man es sich so einfach machen, wie ichs mir grade denke? :D 

Würde ich das Spiel verlassen, müsste ich die Optionen doch sicherlich auch wieder "entladen" oder soetwas.

Wäre nett, wenn mir das jemand mal erklären könnte :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, das kannst du so machen, daß du deine Optionenszene additiv lädst mit der Methode:

https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadScene.html
und dem Parameter:
https://docs.unity3d.com/ScriptReference/SceneManagement.LoadSceneMode.Additive.html

Was passiert dabei genau?
Die vorherige Szene wird nicht gelöscht (oder zerstört) und alle Objekte der zu ladenden Szene werden der vorherigen Szene hinzugefügt.

Man kann die Optionenmenu-Objekte sogar wieder entladen mit:
https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.UnloadSceneAsync.html

Allerdings halte ich das Entladen für eher überflüssig, du solltest programmatisch erfassen, ob das Optionenmenü bereits geladen wurde (damit du es nicht mehrfach lädst) und ansonsten kannst du das einmal geladene Menü einfach geladen lassen und es kontextbezogen (d.h. das Menu bemerkt selbst ob es aus dem Hauptmenu oder dem Spiel heraus angezeigt wird) Anzeigen wenn es benötigt wird, daher ist ein Entladen nicht notwendig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, mal alles getestet, ich glaub ich habs doch noch nicht verstanden,

Ich starte das Spiel, lade die Ingame Szene. Dort gibt es das Ingame Menü mit nem Optionen Button.

Also im Hauptmenü lade ich das Spiel:

public void StartGame()
    {
        LoadScene("Ingame", LoadSceneMode.Single); // Spiel starten
    }

Öffne ich das Ingame Menü und klicke auf "Optionen" rufe ich diese Methode auf

public void LoadOptions()
    {
        LoadScene("Options", LoadSceneMode.Additive); // Ingame Szene nicht zerstören und Optionen laden
    }

Naja, so weit so gut. Jetzt behält er ja logischerweise alle Objekte aus der Ingame Szene, das ist natürlich blöd. Muss ich die alle per Script ausblenden und deaktivieren? Oder gibt es da eine andere Reihenfolge, wie man sowas aufbaut? 

Ich möchte meine Objekte des Spiels ja erst wieder "sehen", wenn ich die Optionen wieder verlasse.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Man kann dafür ein schwarzes Hintergrundbild im Canvas (GUI) verwenden, daß alle Objekte im Hintergrund dann verdeckt. Auf dieses Hintergrundbild legt man dann das Menü. Man kann es auch semitransparent gestalten, dann kann man noch Teile des Spiel im Hintergrund erkennen, ist dann quasi wie eine Blende (Abdeckung) damit man das Menü besser erkennen kann. 
https://docs.unity3d.com/Manual/script-Image.html

Du kannst auch deine ganzen Spielobjekte einem Container-Gameobjekt unterordnen und dann den Container einfach ausblenden (disablen). Dann hast du aber immer noch das Problem, daß du die Skybox siehst (die könnte man auch wieder abschalten und auf einfarbig setzen). Daher ist die Variante mit dem Abdecken des Spiels über ein Image innerhalb eines Canvas wohl einfacher.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...