Widziałem kilka filmów i samouczków dotyczących tworzenia obiektów singletonów w Unity, głównie dla takich GameManager
, które wydają się wykorzystywać różne podejścia do tworzenia instancji i sprawdzania singletona.
Czy istnieje właściwe, a raczej preferowane podejście do tego?
Dwa główne przykłady, które napotkałem, to:
Pierwszy
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);
}
}
druga
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;
}
}
Główną różnicą między nimi jest:
Pierwsze podejście będzie polegało na przejściu przez stos obiektów gry w celu znalezienia instancji, GameManager
która choć zdarza się to (lub powinna się zdarzyć) tylko raz, wydaje się, że może być bardzo niezoptymalizowana, ponieważ sceny powiększają się podczas tworzenia.
Pierwsze podejście oznacza również, że obiekt nie będzie usuwany, gdy aplikacja zmieni scenę, co zapewnia zachowanie obiektu między scenami. Wydaje się, że drugie podejście się do tego nie stosuje.
Drugie podejście wydaje się dziwne, ponieważ w przypadku, gdy instancja jest pusta w module pobierającym, utworzy nowy GameObject i przypisze do niego komponent GameManger. Jednak nie można tego uruchomić bez uprzedniego podłączenia tego komponentu GameManager do obiektu w scenie, co powoduje pewne zamieszanie.
Czy są jakieś inne podejścia, które byłyby zalecane, lub hybryda dwóch powyższych? Istnieje wiele filmów i samouczków dotyczących singletonów, ale wszystkie różnią się tak bardzo, że trudno jest dokonać porównania między nimi, a tym samym stwierdzić, który z nich jest najlepszym / preferowanym podejściem.
GameManager
należy zrobić, a raczej jak zapewnić, że istnieje tylko jedna instancja obiektu i najlepszy sposób, aby to wymusić.