Reproductor d'àudio

Reproducció centralitzada amb assets de definició, emissors i senyals tipades per a sons d'UI i de joc.

Per a què serveix aquest sistema

Tot projecte Unity acaba necessitant el mateix: un únic lloc on demanar un efecte de so. Clics de botó, transicions de menú, confirmacions de modal i esdeveniments de joc volen un clip, però cada prefab inventa el seu propi cablejat d'AudioSource. El resultat és un projecte on el mateix so de clic està duplicat en tres prefabs, els volums no quadren i descobrir quin AudioSource reprodueix què es converteix en una tasca de depuració pròpia.

El Reproductor d'àudio de Serenity centralitza la reproducció de clips. Descrius els clips mitjançant definicions, demanes al servei que els reprodueixi per referència o senyal, i els emissors s'encarreguen de l'AudioSource real al costat de Unity.

El problema a Unity

Els AudioSource de Unity són fàcils d'afegir i difícils d'organitzar. Sense una capa al damunt, cada botó agafa un clip i cada sistema acaba amb el seu propi codi d'àudio. Els volums deriven, els clips se solapen i pausar tota la pila d'àudio es converteix en un bucle manual sobre escenes. El feedback sonor d'UI, en particular, sol estar cuit dins del prefab, cosa que fa impossible retematitzar l'UI sense tocar àudio al mateix temps.

L'altra meitat del problema són les senyals. Quan el codi de joc vol reproduir un so no hauria de necessitar una referència directa a un AudioSource sobre un GameObject concret. Aquest acoblament és el que fa que els prefabs d'UI siguin difícils de reutilitzar entre pantalles.

Com ho aborda Serenity

Serenity exposa la reproducció com a casos d'ús sobre el servei AudioPlayer: AudioPlayerPlayClip, AudioPlayerPauseAllClips, AudioPlayerResumeAllClips i AudioPlayerStopAllClips. Els clips es descriuen mitjançant IAudioPlayerClipDefinition, s'agrupen en entrades AudioPlayerGroup i es reprodueixen per instàncies AudioPlayerEmitter creades a través d'IAudioPlayerEmitterFactory.

El sistema també publica senyals com PlayAudioClipSignal i PlayAudioClipFromGameSettingsSignal. Qualsevol codi del projecte pot llançar una senyal per reproduir un clip sense resoldre el servei directament. Els Temes d'UI poden carregar referències de so, així que menús i modals reben el seu feedback sonor des del tema actiu.

Els sons posicionals també poden reaccionar al món. Un canal activa els depth cues — un filtre que enfosqueix els sons amb la distància i darrere de murs, més un eco en cada so posicional — des del desplegable Depth Cues de Create Audio Player Settings o des de l'inspector del canal. Els murs es poden graduar segons la distància extra que un so ha de recórrer envoltant-los per quedar totalment bloquejat, de manera que una tanca baixa gairebé no amorteix un so mentre que un edifici el tanca, i una Audio Room amb fills Audio Portal permet sentir un so que és darrere del mur de la sala a través del portal obert més curt. Un clip també pot portar la seva pròpia distància mínima i màxima, mode d'atenuació i spread. Tot està desactivat per defecte, i els canals de música i els sons 2D mai es toquen.

Com encaixa a Serenity

El Reproductor d'àudio viu al namespace Serenity.AudioPlayer. Les entitats de Domini descriuen clips, grups i emissors. La capa d'Aplicació exposa el servei, les factories i els casos d'ús. La capa d'Infraestructura aporta la implementació Unity, inclòs l'emissor recolzat per AudioSource, l'editor del servei i l'adaptador d'interfície UnityAudioPlayerGateway amb què parla la resta del sistema.

El Reproductor d'àudio connecta amb el Sound Mixer per als volums per categoria, amb Game Settings per als volums persistents, amb l'Event Dispatcher per a les senyals de reproducció i pausa, i amb els Temes d'UI perquè menús i modals declarin el seu feedback sonor juntament amb els seus visuals.

Flux de treball pràctic

  1. Autora definicions de clip per als sons que vulguis exposar, agrupats per propòsit o escena.
  2. Configura un emissor d'àudio amb CreateAudioPlayerEmitterInput quan necessitis un nou destí de reproducció.
  3. Dispara sons cridant AudioPlayerPlayClip amb l'input corresponent o llançant PlayAudioClipSignal.
  4. Enruta els sons d'UI a través del tema d'UI actiu perquè menús i modals siguin coherents.
  5. Fes servir AudioPlayerPauseAllClips i AudioPlayerResumeAllClips quan el joc es pausa o es reprèn.
  6. Associa un volum d'efectes a Game Settings i al Sound Mixer perquè el jugador pugui ajustar-lo.
  7. Activa els depth cues d'un canal a Create Audio Player Settings i afegeix una Audio Room amb fills Audio Portal on una porta hagi de deixar passar el so.
  8. Defineix la distància mínima i màxima, el mode d'atenuació i l'spread d'un clip des del seu inspector, Batch Import Sound Effects o la recepta del projecte quan les reproduccions posicionals ho necessitin.

Què inclou

  • Definicions de clip descrites mitjançant IAudioPlayerClipDefinition
  • Casos d'ús AudioPlayerPlayClip, AudioPlayerPauseAllClips, AudioPlayerResumeAllClips i AudioPlayerStopAllClips
  • Factoria d'emissors que crea emissors recolzats per AudioSource en temps d'execució
  • Senyals PlayAudioClipSignal i PlayAudioClipFromGameSettingsSignal per a dispars desacoblats
  • Grups de reproducció per organitzar clips per propòsit
  • Adaptador d'interfície UnityAudioPlayerGateway entre la capa d'aplicació i la de Unity
  • Integració amb Sound Mixer per a volums per categoria i amb Game Settings per a persistència
  • Instal·lador que registra el servei per a tot el projecte
  • Depth cues per canal: un filtre per a la distància i els murs i un eco en cada so posicional, desactivats per defecte
  • Oclusió graduada de murs, perquè una tanca baixa gairebé no amorteixi un so mentre que un edifici el tanca
  • Audio Room i Audio Portal per sentir el so a través de portes, amb un gizmo a Play Mode que mostra el que es bloqueja
  • Distància mínima i màxima, mode d'atenuació i spread per clip per a reproduccions posicionals

Quan fer-lo servir

  • Projectes que necessiten feedback sonor d'UI i clips de joc dirigits des del mateix servei.
  • Equips que volen sons associats a temes i senyals en lloc d'AudioSource solts en prefabs.
  • Jocs que necessiten pausar i reprendre tots els sons alhora quan el joc canvia d'estat.
  • Bases de codi que volen una separació neta entre efectes de so i pistes de música.
  • Jocs amb so posicional on els murs, les sales i les portes han de canviar el que sent el jugador.

Sistemes relacionats

Utilitza Serenity quan vulguis una pipeline d'efectes que ja coopera amb temes, mixers i ajustos, però que et segueix deixant triar els clips i volums des del teu propi projecte de Unity.

Tornar a la pàgina principal