Ich habe mehrere Videos und Tutorials zum Erstellen von Singleton-Objekten in Unity gesehen, hauptsächlich für a GameManager
, die unterschiedliche Ansätze zum Instanziieren und Validieren eines Singleton zu verwenden scheinen.
Gibt es einen richtigen oder eher bevorzugten Ansatz dafür?
Die beiden wichtigsten Beispiele, die ich angetroffen habe, sind:
Zuerst
public class GameManager
{
private static GameManager _instance;
public static GameManager Instance
{
get
{
if(_instance == null)
{
_instance = GameObject.FindObjectOfType<GameManager>();
}
return _instance;
}
}
void Awake()
{
DontDestroyOnLoad(gameObject);
}
}
Zweite
public class GameManager
{
private static GameManager _instance;
public static GameManager Instance
{
get
{
if(_instance == null)
{
instance = new GameObject("Game Manager");
instance.AddComponent<GameManager>();
}
return _instance;
}
}
void Awake()
{
_instance = this;
}
}
Der Hauptunterschied, den ich zwischen den beiden sehe, ist:
Der erste Ansatz versucht, im Spielobjektstapel zu navigieren, um eine Instanz der zu finden GameManager
, obwohl dies nur einmal vorkommt (oder sollte), als ob es sehr unoptimiert erscheinen könnte, wenn Szenen während der Entwicklung an Größe zunehmen.
Außerdem markiert der erste Ansatz das Objekt, das nicht gelöscht werden soll, wenn die Anwendung die Szene ändert, wodurch sichergestellt wird, dass das Objekt zwischen den Szenen beibehalten wird. Der zweite Ansatz scheint dem nicht zu entsprechen.
Der zweite Ansatz erscheint seltsam, da in dem Fall, in dem die Instanz im Getter null ist, ein neues GameObject erstellt und ihm eine GameManger-Komponente zugewiesen wird. Dies kann jedoch nicht ausgeführt werden, ohne dass diese GameManager-Komponente zuvor bereits an ein Objekt in der Szene angehängt wurde, was mich verwirrt.
Gibt es andere Ansätze, die empfohlen würden, oder eine Mischung aus beiden? Es gibt viele Videos und Tutorials zu Singletons, aber sie unterscheiden sich alle so sehr, dass es schwierig ist, Vergleiche zwischen den beiden zu ziehen, und somit eine Schlussfolgerung darüber zu ziehen, welches der beste / bevorzugte Ansatz ist.
GameManager
soll, sondern wie sichergestellt werden kann, dass es immer nur eine Instanz des Objekts gibt und wie dies am besten durchgesetzt werden kann.