Introducción
Esta solución para Unity consiste en un sistema de control de volumen para la música y los efectos de sonido, la idea es que en una ventana de configuración se ajustan los niveles deseados, el sistema guarda esa información y se la aplica a todos los componentes AudioSource que tiene registrados. Para registrar un componente AudioSource en el sistema basta con asignarle uno de dos Scripts que vienen dentro del paquete, uno lo asignaremos si se trata de un AudioSource de música, el otro si el AudioSource es de sonido. El sistema registrará todos estos AudioSources, añadiendo los que se van creando y quitando los que se van destruyendo. Además, como el sistema guarda la configuración seteada por el usuario, al iniciar nuevamente el juego esos volumenes estarán aplicados.
En el siguiente vídeo se ve cómo configurar desde cero el sistema de control de volumen para Unity:
Paquete de Unity para descargar e importar:
Cómo utilizar este sistema de control de volumen
En el paquete de descarga viene una escena en la que está montado el sistema.
Paso 1: Colocar el script AudioSettings en la escena para el control del sistema
En el paquete viene un Script llamado AudioSettings, este Script tiene que estar presente en la escena, en mi caso lo puse en un GameObject vacío llamado «AudioSettings», en el inspector se verán los valores actuales de volumen de música y efectos de sonido y la cantidad de AudioSources registrados, pero estos valores son solo para informarse lo que está pasando dentro del sistema, escribir valores en esos campos no afectará en nada.
Paso 2: Asignar los Scripts apropiados a los AudioSources
En la escena en general tendremos varios componentes AudioSource que emitirán sonidos. Para registrar estos AudioSources hay que asignarles al mismo GameObject que tiene el AudioSource un Script que se encarga de inicializar estos objetos e integrarlos al sistema, los scripts son: «MusicAudioSource» y «SFXAudioSource», solo con asignar uno de estos scripts el sistema se encarga de integrarlo al sistema, cargarle el volumen apropiado y modificarle el volumen cuando se produce un cambio en la configuración, no importa si el objeto con el AudioSource existe antes de entrar en el modo juego o se instancia a través de un Prefab (siempre que pongamos el Script en el Prefab). Esto lo podemos comprobar si vemos el inspector del script AudioSettings, el cual nos informa cuántos AudioSources de cada tipo hay registrados.
Paso 3: Sliders de control de volumen
En la escena viene un pequeño Canvas que contiene dos Sliders de control, uno para el volumen de la música y otro para el volumen de los efectos de sonido. Estos Sliders tienen que ejecutar las funciones dinámicas de cambio de volumen apropiadas que están definidas dentro del Script AudioSettings (ver el evento «OnValueChanged» de cada Slider).
Para lograr que el Slider muestre inicialmente los valores de volumen con los que se carga el sistema, tienen que tener asignado el Script «UIElementInitializer» y seleccionar el tipo de elemento del que se trata, en este caso tendremos solo dos elementos: «MUSIC_Slider» y «SFX_Slider», pero este sistema ustedes lo pueden ampliar para inicializar cualquier tipo de elementp de la interfaz gráfica que quieran, simplemente añadiendo elementos al enum dentro del Script y agregando casos dentro del Switch definido en la función Start.
Esto permitiría tener Sliders de control de volumen en distintas escenas y que todos afecten los mismos valores de configuración.