Reproductor de música per a Unity

Música de fons dirigida per definicions de pista, transicions configurables i senyals tipades que pots enganxar a l'estat del joc.

Per a què serveix aquest sistema

La música de fons a Unity sol començar com un AudioSource que arrenca a Awake. Després apareix un per a la música de menú, un altre per a la del cap final i un script a mida que canvia clips i intenta fer fade. Pausar, reprendre i saltar acaben repartits entre managers, i en el moment que el joc afegeix un nou estat el codi de música s'ha de tocar de nou.

El Reproductor de música de Serenity tracta la música com un sistema tipat i configurable. Les pistes es defineixen com a assets, el servei exposa casos d'ús explícits per reproduir, pausar, reprendre, parar i saltar, i les transicions entre pistes tenen un tipus definit en lloc d'una corrutina puntual.

El problema a Unity

La música és un dels sistemes que més pateix el creixement gradual. Un loop de fons simple es converteix en un sistema dinàmic en el moment que el joc té menús, nivells, cinemàtiques i un estat de pausa. Els managers de música casolans acaben amb estàtics globals, referències a clip cuites i una rutina de fade que no cobreix tots els casos límit. Fer crossfade, encuar la pista següent i reprendre després de pausa són fàcils d'equivocar per separat, i més fàcils encara en combinació.

La música també ha de reaccionar a l'estat del joc. Entrar en un menú, pausar, començar una sessió i canviar de mode de joc són moments en què hauria de reaccionar. Sense una integració neta, aquestes reaccions es reparteixen entre scripts que no haurien de saber res d'àudio.

Com ho aborda Serenity

Serenity exposa la reproducció a través dels casos d'ús MusicPlayerPlaySong, MusicPlayerPlaySongById, MusicPlayerPauseSong, MusicPlayerResumeSong, MusicPlayerStopSong, MusicPlayerPlayNextSong i MusicPlayerPlayPreviousSong. Les pistes es descriuen mitjançant IMusicTrackDefinition i s'emmagatzemen com a entitats MusicTrack. Les transicions es configuren a través de MusicPlayerTransitionType, cosa que evita el codi de fade ad hoc.

El servei publica senyals com PlayMusicTrackSignal i PlayMusicTrackFromGameSettingsSignal, així que la resta del projecte pot demanar canvis de música sense referenciar el servei directament. La implementació Unity la proporciona UnityMusicPlayerService.

La reproducció per id facilita dirigir la música des de dades externes com la definició d'un nivell o una partida desada. El servei sap resoldre l'id contra les pistes configurades, així que el codi que crida només necessita saber quina cançó vol escoltar.

Com encaixa a Serenity

El Reproductor de música pertany al namespace Serenity.MusicPlayer. Les entitats de Domini descriuen les pistes. La capa d'Aplicació exposa els casos d'ús, la interfície IMusicPlayerService i el gateway IMusicPlayerGateway. La capa d'Infraestructura aporta UnityMusicPlayerService i un editor per als ajustos.

El Reproductor de música connecta de manera natural amb Game Mode per entrar i sortir d'estats de joc, amb l'Event Dispatcher per encaminar senyals, amb el Sound Mixer per al volum de la categoria de música, amb Game Settings per a preferències de música persistents i amb el Reproductor d'àudio per als efectes sonors que no s'haurien de confondre amb la pista de fons.

Flux de treball pràctic

  1. Crea definicions de pista per a cada música que vulguis exposar.
  2. Configura les transicions a cada pista o per petició fent servir MusicPlayerTransitionType.
  3. Deixa que l'instal·lador de música registri el servei a la pipeline d'inicialització.
  4. Llança PlayMusicTrackSignal o crida MusicPlayerPlaySong per iniciar una pista.
  5. Reacciona a les senyals de Game Mode per canviar pistes en entrar al menú, iniciar partida, pausar i reprendre.
  6. Associa un control de volum de música a Game Settings i a la categoria corresponent del Sound Mixer.

Què inclou

  • Definicions de pista descrites mitjançant IMusicTrackDefinition
  • Casos d'ús per reproduir, reproduir per id, pausar, reprendre, parar, següent i anterior
  • Transicions configurables via MusicPlayerTransitionType
  • Senyals PlayMusicTrackSignal i PlayMusicTrackFromGameSettingsSignal
  • Implementació Unity UnityMusicPlayerService recolzada per un gateway de música
  • Integració amb senyals de Game Mode per a canvis de música dirigits per estat
  • Integració amb Sound Mixer per al volum de la categoria de música
  • Instal·lador que registra el reproductor per a tot el projecte

Quan fer-lo servir

  • Projectes amb més d'una pista i almenys una transició d'estat entre elles.
  • Jocs que necessiten crossfades o altres transicions sense escriure corrutines a mida.
  • Equips que volen que els canvis de música reaccionin a l'estat del joc en lloc de disparar-se a mà.
  • Bases de codi que volen el volum de música lligat a una categoria real del Sound Mixer en lloc del camp de volum d'un AudioSource.

Sistemes relacionats

Utilitza Serenity quan vulguis una pipeline de música que ja coopera amb mixers, ajustos i senyals d'estat, però que et segueix deixant decidir quines pistes sonen i com transicionen.

Tornar a la pàgina principal