Szenenübergreifende Variablen

Einleitung

In diesem Artikel möchte ich euch verschiedene Herangehensweisen zeigen um benötigte Variablen von einer Szene in eine andere übernehmen können. Dabei schauen wir uns speziell die statischen Variablen, die DontDestroyOnLoad() Methode, die PlayerPrefs und die WWW Klasse an.

Statische Variablen

Mithilfe des static Schlüsselworts werden Variablen in C# als statisch behandelt und behalten somit ihren Wert solange bis entweder die AppDomain entladen wurde, das heißt bis das Spiel beendet bzw. zwischen Player-/ und Editor-Modus in Unity umgeschaltet wird, oder der Thread in dem sie erstellt wurden beendet wurde. Es sind also Globale Variablen die nur innerhalb einer Klasse definiert werden um einen Zugriffspunkt auf sie zu bekommen. Sie sind an keine Objektinstanz gebunden und „überleben“ damit auch wenn es keine Instanz einer Klasse mehr gibt. Die aufrufende Klasse selbst spielt dabei nur eine Rolle wenn es darum geht eine Zugriffsbeschränkung durch andere Schlüsselwörter, wie public oder private, zu erreichen und ist somit nur einer Art Namespace.

Der Vorteil von statischen Variablen ist, dass sie sehr einfach zu verwenden sind. Der Nachteil allerdings ist, dass sie über-verwendet werden und damit einen eher schlechten Programmierstil fördern. Außerdem ist das Verwalten der Lebenszeit dieser Variablen nicht möglich. Es müssen beispielsweise alle statischen Variablen explizit neu deklariert werden sofern man sie zurücksetzen möchte. Zudem sind sie nicht persistent und verschwinden somit unwiderruflich nach Programmende.

DontDestroyOnLoad

Mithilfe dieser Unity3D Methode kann ein ganzes Unity.Object davor bewahrt werden bei einem Umschalten der Szenen zerstört zu werden. Alle Komponenten die uns in Unity zur Verfügung stehen sind solche Unity.Objekts. Möchte man ein solches Objekt dennoch löschen muss dies manuell durch eine andere Methode Destroy() bzw. DestroyImmediate() geschehen. Auch bei dieser Herangehensweise verschwinden die Variablen natürlich sobald das Programm beendet wird, ähnlich der statischen Variablen.

PlayerPrefs

Um Daten persistent speichern und wieder laden zu können ist es nötig eine solche Logik selbst zu implementieren. Glücklicherweise existieren dazu im AssetStore bereits diverse, auch kostenlose, Angebote welche einem viel Arbeit abnehmen. Alternativ bietet Unity selbst eine Lösung dafür, die PlayerPrefs. Zu den PlayerPrefs werde ich zu geeigneter Zeit einen eigenen Artikel verfassen. Zunächst erwähne ich hier nur ein kleines abgespecktes Beispiel wie diese verwendet werden könnten. Die Daten werden dabei lokal gespeichert. Je nach Plattform auf der das Spiel läuft befinden sich die Daten an unterschiedlichen Pfaden.

WWW Klasse

Eine andere Herangehensweise um die benötigten Variablen bzw. deren Daten global zu speichern und zu laden führt über einen eigenen Webserver.  Hat man nun einen solchen Webserver und entsprechende Schnittstellen (Stichwort NodeJS) kann man die WWW-Klasse von Unity verwenden um Daten an diesen zu senden oder von ihm zu empfangen.

Siehe: Unity3D Dokumentation – WWW Klasse

 

Sinue

Mein Name ist Tim Gette. Ich bin 24 Jahre alt und gelernter Fachinformatiker in der Fachrichtung Anwendungsentwicklung. Seit sechs Jahren bin ich nun im Berufsleben unterwegs. Seit einigen Monaten habe ich mein Interesse an der Spiele-Entwicklung entdeckt und bin in das Thema Unity3D eingestiegen. Nun möchte ich versuchen anderen Neulingen in diesem Bereich den Einstieg durch hilfreiche Tipps & Tricks, Tutorials und einfach meine bereits gesammelten Erfahrungen zu erleichtern. Ich freue mich über jegliches Feedback zu meinen Artikeln und beantworte gerne eure Fragen. Mehr über mich erfahrt ihr auf der entsprechenden 'Über mich' Seite meines Blogs.
Menü schließen
×
×

Warenkorb