He visto varios videos y tutoriales para crear objetos singleton en Unity, principalmente para a GameManager
, que parecen usar diferentes enfoques para crear instancias y validar un singleton.
¿Existe un enfoque correcto, o más bien preferido, para esto?
Los dos ejemplos principales que he encontrado son:
primero
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);
}
}
Segundo
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;
}
}
La principal diferencia que puedo ver entre los dos es:
El primer enfoque intentará navegar por la pila de objetos del juego para encontrar una instancia de la GameManager
cual, aunque esto solo suceda (o solo suceda), una vez parezca que podría no ser optimizada a medida que las escenas crecen en tamaño durante el desarrollo.
Además, el primer enfoque marca el objeto para que no se elimine cuando la aplicación cambia de escena, lo que garantiza que el objeto persista entre escenas. El segundo enfoque no parece adherirse a esto.
El segundo enfoque parece extraño, ya que en el caso de que la instancia sea nula en el captador, creará un nuevo GameObject y le asignará un componente GameManger. Sin embargo, esto no puede ejecutarse sin tener este componente GameManager ya conectado a un objeto en la escena, por lo que esto me está causando cierta confusión.
¿Hay otros enfoques que se recomendarían, o un híbrido de los dos anteriores? Hay muchos videos y tutoriales sobre singletons, pero todos difieren tanto que es difícil establecer comparaciones entre los dos y, por lo tanto, llegar a una conclusión sobre cuál es el enfoque mejor / preferido.
GameManager
deberían hacer, sino cómo asegurarse de que solo haya una instancia del objeto y la mejor manera de hacer cumplir eso.