Reproductor de audio para Unity
Reproducción centralizada con assets de definición, emisores y señales tipadas para sonidos de UI y de juego.
Para qué sirve este sistema
Todo proyecto Unity acaba necesitando lo mismo: un único sitio donde pedir un efecto de sonido. Clics de botón, transiciones de menú, confirmaciones de modal y eventos de juego quieren un clip, pero cada prefab inventa su propio cableado de AudioSource. El resultado es un proyecto donde el mismo sonido de clic está duplicado en tres prefabs, los volúmenes no cuadran y averiguar qué AudioSource reproduce qué se convierte en una tarea de depuración propia.
El Reproductor de audio de Serenity centraliza la reproducción de clips. Describes los clips mediante definiciones, le pides al servicio que los reproduzca por referencia o señal, y los emisores se encargan del AudioSource real en el lado de Unity.
El problema en Unity
Los AudioSource de Unity son fáciles de añadir y difíciles de organizar. Sin una capa por encima, cada botón coge un clip y cada sistema termina con su propio código de audio. Los volúmenes derivan, los clips se solapan y pausar toda la pila de audio se convierte en un bucle manual sobre escenas. El feedback sonoro de UI, en particular, suele estar cocido dentro del prefab, lo que hace imposible retematizar la UI sin tocar audio al mismo tiempo.
La otra mitad del problema son las señales. Cuando el código de juego quiere reproducir un sonido no debería necesitar una referencia directa a un AudioSource sobre un GameObject concreto. Ese acoplamiento es lo que hace que los prefabs de UI sean difíciles de reutilizar entre pantallas.
Cómo lo aborda Serenity
Serenity expone la reproducción como casos de uso sobre el servicio AudioPlayer: AudioPlayerPlayClip, AudioPlayerPauseAllClips, AudioPlayerResumeAllClips y AudioPlayerStopAllClips. Los clips se describen mediante IAudioPlayerClipDefinition, se agrupan en entradas AudioPlayerGroup y se reproducen por instancias AudioPlayerEmitter creadas a través de IAudioPlayerEmitterFactory.
El sistema también publica señales como PlayAudioClipSignal y PlayAudioClipFromGameSettingsSignal. Cualquier código del proyecto puede lanzar una señal para reproducir un clip sin resolver el servicio directamente. Los Temas de UI pueden cargar referencias de sonido, así que menús y modales reciben su feedback sonoro desde el tema activo.
Cómo encaja en Serenity
El Reproductor de audio vive en el namespace Serenity.AudioPlayer. Las entidades de Dominio describen clips, grupos y emisores. La capa de Aplicación expone el servicio, las factorías y los casos de uso. La capa de Infraestructura aporta la implementación Unity, incluido el emisor respaldado por AudioSource, el editor del servicio y el adaptador de interfaz UnityAudioPlayerGateway con el que habla el resto del sistema.
El Reproductor de audio conecta con el Sound Mixer para los volúmenes por categoría, con Game Settings para los volúmenes persistentes, con el Event Dispatcher para las señales de reproducción y pausa, y con los Temas de UI para que menús y modales declaren su feedback sonoro junto a sus visuales.
Flujo de trabajo práctico
- Autora definiciones de clip para los sonidos que quieras exponer, agrupados por propósito o escena.
- Configura un emisor de audio con CreateAudioPlayerEmitterInput cuando necesites un nuevo destino de reproducción.
- Dispara sonidos llamando a AudioPlayerPlayClip con el input correspondiente o lanzando PlayAudioClipSignal.
- Encamina los sonidos de UI a través del tema de UI activo para que menús y modales sean coherentes.
- Usa AudioPlayerPauseAllClips y AudioPlayerResumeAllClips cuando el juego se pausa o se reanuda.
- Asocia un volumen de efectos a Game Settings y al Sound Mixer para que el jugador pueda ajustarlo.
Qué incluye
- Definiciones de clip descritas mediante IAudioPlayerClipDefinition
- Casos de uso AudioPlayerPlayClip, AudioPlayerPauseAllClips, AudioPlayerResumeAllClips y AudioPlayerStopAllClips
- Factoría de emisores que crea emisores respaldados por AudioSource en tiempo de ejecución
- Señales PlayAudioClipSignal y PlayAudioClipFromGameSettingsSignal para disparos desacoplados
- Grupos de reproducción para organizar clips por propósito
- Adaptador de interfaz UnityAudioPlayerGateway entre la capa de aplicación y la de Unity
- Integración con Sound Mixer para volúmenes por categoría y con Game Settings para persistencia
- Instalador que registra el servicio para todo el proyecto
Cuándo usarlo
- Proyectos que necesitan feedback sonoro de UI y clips de juego dirigidos desde el mismo servicio.
- Equipos que quieren sonidos asociados a temas y señales en vez de a AudioSource sueltos en prefabs.
- Juegos que necesitan pausar y reanudar todos los sonidos a la vez cuando el juego cambia de estado.
- Bases de código que quieren una separación limpia entre efectos de sonido y pistas de música.
Sistemas relacionados
Usa Serenity cuando quieras una pipeline de efectos que ya coopera con temas, mixers y ajustes, pero que te sigue dejando elegir los clips y volúmenes desde tu propio proyecto de Unity.
English
Español
Català