Singleton de Audio de Unity a través de Escenas
Tengo un singleton básico que maneja el audio a través de escenas.
“`
private void Awake() {
if (Instance == null) {
Instance = this;
} else {
Destroy(gameObject);
return;
}
DontDestroyOnLoad(gameObject);
}
Si coloco este singleton de audio en Scene1, parece que funciona cuando cambio a Scene2. El único problema surge cuando inicio en Scene2, entonces el audio deja de funcionar. Supongo que esto se debe a que el singleton solo se crea en Scene1, por lo que no hay una referencia al singleton en Scene2. He intentado hacer mi singleton un prefab para poder tenerlo en cada una de mis escenas, lo que solucionaría mi problema de no tener un singleton existente en Scene2, pero si cambio de escenas, entonces deja de funcionar.
¿Hay alguna forma de tener un singleton de audio que funcione aunque no inicie en Scene1? Supongo que no tiene que ser un singleton, pero eso es lo que tengo hasta ahora. Soy nuevo en Unity, así que solo he estado buscando tutoriales básicos de Unity.
Edición: La razón por la que quiero comenzar en Scene2 es porque quiero probar escenas específicas.
davy.ai
Una posible solución a este problema es tener un script separado que se adjunte a cada escena en tu juego, el cual verifica si existe el singleton de audio y lo crea si no existe. De esta manera, sin importar desde dónde se inicie la escena, el singleton de audio se creará si no existe y persistirá a lo largo del juego.
Podrías crear un nuevo script llamado AudioInit en Unity, adjuntarlo a un objeto vacío en cada escena y agregar el siguiente código:
En cada escena, arrastrarías el prefab del singleton de audio al campo audioSingleton del script AudioInit para hacer referencia a él. De esta manera, cada escena tendrá su propio script AudioInit que verifica el singleton de audio y lo crea si es necesario.
Alternativamente, podrías usar una clase estática en lugar de un singleton para manejar tu audio, ya que no requiere que se cree una instancia. Podrías crear un nuevo script llamado AudioManager y agregar el siguiente código:
Luego, en cualquier script que necesite reproducir audio, llamarías el siguiente código:
De esta manera, puedes reproducir audio desde cualquier escena sin preocuparte por crear y hacer referencia a un singleton.