Wie erstellt und nutzt man ein Singleton in Unity?

Ein Singleton in Unity zu erstellen ist ziemlich einfach. Es funktioniert im Grunde genommen relativ ähnlich zu dem Vorgehen in Vanilla-C#. Mit dem kleinen Unterschied, dass wir uns im Grunde genommen nicht um die Initialisierung Sorgen machen müssen (zumindest bei MonoBehaviours).

Zunächst erstellen wir eine statische Variable _instance. Zusätzlich eine Property Instance. Diese nutzen wir später, um auf den Singleton zugreifen zu können. Innerhalb der Awake-Methode des MonoBehaviours geben wir der _instance-Variable dann die Referenz auf die Instanz der Klasse mit.

using UnityEngine;

public class MyAwesomeClass : MonoBehaviour
{
    private static MyAwesomeClass _instance;

    // Add other class properties here...

    public static MyAwesomeClass Instance
    {
        get {
            if (_instance == null) {
                Debug.LogError("MyAwesomeClass not instantiated.");
            }

            return _instance;
        }
    }

    private void Awake()
    {
        _instance = this;
    }

    // Add other class methods here...

    public void SomeMethod()
    {
        Debug.Log("It works.");
    }
}

Zugreifen könnt Ihr auf die Methoden und Properties des Singletons dann ganz simpel. Die Klasse steht im globalen Namensraum zur Verfügung.

MyAwesomeClass.Instance.SomeMethod();

Wichtig: Achtet darauf, wann Ihr auf den Singleton zugreift. Die Awake-Methode läuft zwar relativ früh innerhalb eines Game-Loops, allerdings kann es dennoch passieren, dass ihr versucht zu früh auf die Instanz zuzugreifen. Das passiert bei einer reinen C#-Lösung natürlich nicht.

Noch keine Kommentare vorhanden.