DLLs für Unity: Wie man ein GameObject als Singleton erstellt und über den Szenenwechsel behält (Teil 2)
Im zweiten Teil unserer Artikel-Serie über DLLs in Unity zeigen wir, wie man die Singleton-Klasse aus der DLL für den Szenenwechsel anwendet und die Instanz prüft.
Einleitung
Im ersten Teil unserer Anleitung haben wir ein Singleton-Pattern in eine DLL ausgelagert, um diese Klassenbibliothek in mehreren Unity-Projekten nutzen zu können. Im zweiten Teil schauen wir, ob das Singleton funktioniert und die Instanz über mehrere Szenen hinweg gehalten wird.
Zum ersten Teil: Wie man eine .NET Klassenbibliothek für die Unity Engine als DLL mit Visual Studio erstellt und in Unity verwendet – Teil 1
Versionshinweis
In diesem Beitrag wurden Tools mit folgenden Versionen verwendet:
- Unity 2019.3.6
- Visual Studio 2017 (15.9.6)
- Visual Studio Code 1.43.2
- .NET Framework 4.6.1
Singleton-Instanz über mehrere Szenen
Eine Zweite Szene erstellen
Zunächst duplizieren wir die SampleScene, die wir im ersten Teil unserer Anleitung angelegt hatten und nennen sie SampleScene2.
Dann ändern wir die UI in der zweiten Szene, damit wir sie als diese erkennen.
Da wir die Szene dupliziert haben, finden wir auch hier den GameManager. Dieser hat die Singleton-Komponente und die Instanz in dieser Szene sollte demnach zerstört werden, wenn wir von Szene 1 zu Szene 2 wechseln.
Um das zu prüfen geben wir der Variable an der Komponente einen anderen Wert.
Als nächstes benötigen wir ein Script für den Szenenwechsel.
Script für den Szenenwechsel
Unser GameManager soll für das ganze Spiel gelten. Jetzt benötigen wir jedoch ein Script, das Funktionen für alle Szene bereit stellt und wir für jede Szene individuelle Parameter übergeben können.
Dazu erstellen wir ein Component-Script MySceneManager.cs.
Dort schreiben wir eine Methode ChangeScene, der wir als Parameter den Szenennamen übergeben und in der Methode die Szene wechseln.
LoadSceneMode setzen wir auf Single.
Component zu den Szenen hinzufügen
Jetzt erzeugen wir in beiden Szenen ein leeres GameObject SceneManager.
Diesem fügen wir MyStateManager als neue Komponente hinzu.
Jetzt können wir der UI sagen, dass beim Klick auf den Button die Szene gewechselt werden soll.
Szenenwechsel Click-Event
Dazu markieren wir zunächst den Button in unserer ersten Szene. Im Inspektor suchen wir die Button-Component und dort den Bereich für die Events.
Hier ziehen wir das SceneManager GameObject aus der Hierarchie hinein.
Dann wählen wir die Funktion MySceneManager.ChangeScene.
Schließlich schreiben wir als Parameter den Namen der zweiten Szene hinein.
Das gleiche machen wir in der zweiten Szene, nur dass wir hier als Parameter den Namen der ersten Szene angeben.
Zweite Szene den Build-Settings hinzufügen
Um zwischen Szenen wechseln zu können, müssen diese in den Build-Settings den Scenes In Build hinzugefügt werden.
Szene 1 starten und Szene wechseln
Jetzt öffnen wir wieder unsere erste Szene, drücken Play.
Die Log-Ausgabe sieht schon mal vielversprechend aus.
Jetzt drücken wir auf den Button.
Und siehe da: Unsere zweite Szene wurde geladen.
Jetzt prüfen wir noch den Wert des GameManagers im Inspektor.
Und siehe da: Es ist der Wert, den wir an den GameManager der ersten Szene dran geschrieben haben. Die Instanz ist beim Szenenwechsel also erhalten geblieben und die zweite Instanz zerstört wurden.
Ausblick
Im nächsten Teil der Anleitung schauen wir, wie man Projekte, die die DLL eingebunden haben als Unity-Packages exportiert und in einer weiteren Anwendung zusammen verwendet.
Nächster Artikel: DLLs für Unity: Wie man eine DLL als Abhängigkeit in einem Unity-Package exportiert und in anderen Projekten verwendet (Teil 3)
Bis dahin hoffe ich, diese erstbeste Anleitung war hilfreich.
Sie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen