Unity3D: Singleton für langsame Operationen

Dieser Artikel wurde von Do, Hoang Viet am Sonntag, 8. Dezember 2013 verfasst. Aktualisiert: 29.01.2014 23:05:02

Operationen wie Object.FindObjectOfType werden in der Dokumentation von Unity3D Entwickler selbst als sehr langsam beschrieben. Aus dem Grund wird geraten das Singleton Pattern zu benutzen.

Was ist ein Singleton

Ein Singleton ist ein Erzeugungsmuster bei der Programmierung, bei dem das Erzeugen des Objektes außerhalb der Klasse unterbunden wird. In C# müssten wir nur den Konstruktor auf protected oder private setzen.

Anschließend wird eine Klassenmethode definiert, die die eine (und meist) einzige Instanz zurück liefert.

public class Printer {
    static public Printer Current {
        get {
            if(instance = null) {
                instance = new Drucker();
            }
            return instance;
        }
    }
    static private Printer instance;

    protected Printer() {
        // ...
    }
}

Danach lässt sich der aktuelle Drucker wie folgt ansprechen

Printer.Current.tu_irgendwas();

Singleton im Fall von Unity3D

In unserem Fall geht es eigentlich nicht um darum Objektenerzeugungen zu unterbinden. Wir wollen nur die langsame Operation vermeiden.

Das ganze demonstrieren wir am Beispiel eines JewelGameBoard aus unserem Projekt Jewels Vs.

public class JewelGameBoard : MonoBehaviour {
    public static JewelGameBoard Current {
        get {
            return _currentBoard ??
                (_currentBoard = FindObjectOfType<JewelGameBoard>());
        }
    }
    private static JewelGameBoard _currentBoard;
}

Nun lässt sich das Gameboard wie oben beim Printer aufrufen.

Langsame Operationen von Unity3D

Folgende Operationen würden in der Unity3D-Dokumentation als "very slow" bezeichnet.

  • Object.FindObjectOfType
  • Object.FindObjectsOfType
  • Resources.FindObjectsOfTypeAll

 

 
blog comments powered by Disqus

Google Anzeigen

Neusten Blogeinträgen

  • CSS: Animationen

    CSS3 bietet von Haus aus Möglichkeiten zur Definition von Animationen über die Property animation. Wie es funktioniert zeigen wir in diesem Artikel.

  • CSS: Alternierende Tabellenzeilen

    Um die Lesbarkeit von Tabellen zu steigern, bietet die CSS die Möglichkeit Tabellenzeilen alternierend zu färben. Wie das funktioniert zeigen, wir ...

  • Unity3D: Konsolenausgabe formatieren

    Die Unitykonsole ist einer der meistgenutzten Feature wenn es bei Unity um Fehlersuche und -behandlung geht. Sie wird dabei schnell voll und verli ...

  • Unity3D: Optionale Parameter

    Unity3D (4.3.1) unterstützt keine optionale Parameter, wenn die betroffene Skriptdatei in einem Namespace definiert wird.

Popular Threads

Share it on your network