Reproductor de Cinemàtiques

Un reproductor de cinemàtiques ordenat i temporitzat que reprodueix foses, Timelines de Unity i esperes de manera segura durant l'arrencada, amb un assistent i una vista prèvia de Timeline en viu per crear-les.

Per a què serveix aquest sistema

Una pantalla de presentació, una cinemàtica d'introducció o una escena després de vèncer un cap necessiten el mateix: reproduir una seqüència de moments temporitzats — fondre a negre, executar un Timeline, esperar, tornar de la fosa — en ordre, sense penjar mai el joc si un d'aquests moments es porta malament. Les cadenes de corrutines fetes a mà ho aconsegueixen una vegada, i es trenquen quan algú afegeix una etapa o porta el projecte a WebGL, on un context d'àudio encallat pot congelar qualsevol cosa que hi esperi.

El Reproductor de Cinemàtiques de Serenity modela una cinemàtica com una llista ordenada d'etapes reproduïda per un únic servei. Cada etapa — i la cinemàtica sencera — corre sota un timeout dur de rellotge de paret, així que la reproducció és segura d'invocar durant l'arrencada, abans que la resta del joc s'hagi despertat, sense arriscar una pantalla de càrrega congelada.

El problema a Unity

La seqüenciació cinemàtica a Unity tendeix a acumular-se: una corrutina aquí, una crida al PlayableDirector allà, un Invoke per a la fosa, i cap lloc únic que posseeixi l'ordre ni els temps. Afegir una etapa significa editar codi. Provar una cinemàtica significa entrar en mode Play i veure-la passar en temps real, etapa a etapa, sense manera de rebobinar fins a la part que s'acaba de trencar.

Les cinemàtiques d'arrencada són encara més arriscades. Una pantalla de presentació que es reprodueix abans que el joc acabi d'inicialitzar-se no pot assumir un framerate sa ni un context d'àudio en marxa, especialment a WebGL. Una etapa que espera alguna cosa que mai es resol pot penjar tota la seqüència d'arrencada, deixant els jugadors mirant un logo congelat.

Com ho aborda Serenity

Serenity modela una cinemàtica com una UnityCutsceneDefinition — una llista ordenada d'etapes UnityCutsceneStep, cadascuna tipada com a fosa d'entrada, fosa de sortida, reproduir un Timeline de Unity, esperar o personalitzada. ICutscenePlayerService.PlayAsync(id, ct) reprodueix una definició de principi a fi, d'una passada o en bucle, dirigint un overlay de fosa a pantalla completa i un PlayableDirector sobre el prefab de rig propi de la cinemàtica a mesura que avança per les etapes.

Cada etapa corre sota el seu propi timeout dur, i la cinemàtica completa sota un segon timeout extern, tots dos mesurats contra el rellotge de paret i no contra el delta de frames. Això significa que un Timeline penjat o una fosa encallada mai poden bloquejar el cridador indefinidament — la reproducció sempre acaba o expira, i això és el que la fa segura de disparar des del pipeline d'arrencada abans que existeixi la resta del joc.

Com encaixa a Serenity

El Reproductor de Cinemàtiques composa els contractes d'orquestració d'etapes del Reproductor de Seqüències genèric — ISequenceDefinition i ISequenceStage — mentre posseeix la seva pròpia execució d'etapes, overlay de fosa i gestió de rig a través de CutsceneStageType. El prefab de rig s'instancia durant la reproducció i es destrueix després, així que una cinemàtica sense rig reprodueix només una transició de fosa pura.

El servei es registra al ServiceLocator durant la instal·lació, de manera que qualsevol codi — inclosa una acció de tret sense codi generada — pot resoldre ICutscenePlayerService sense cablejat manual. Les definicions es descobreixen per etiqueta d'Addressables des d'un asset UnityCutscenePlayerSettings, mantenint les cinemàtiques creades desacoblades del codi que les reprodueix.

Flux de treball pràctic

  1. Obre Tools ▸ Serenity ▸ Create ▸ Cutscenes ▸ Cutscene Wizard i tria una plantilla — Logo splash, Timeline cutscene, Fade transition o Blank — al pas Template.
  2. Reordena, afegeix o elimina etapes al pas Stages, configurant la durada, el color de la fosa o l'asset de Timeline de cadascuna.
  3. Tria un rig al pas Rig — cap, un prefab existent o un prefab buit nou amb un PlayableDirector — per a les etapes que necessitin contingut visible.
  4. Opcionalment, genera un disparador de reproducció sense codi i una tasca d'arrencada al pas Trigger, perquè la cinemàtica es pugui disparar des d'un SignalEmitterComponent o des del pipeline d'inicialització sense codi de joc.
  5. Crea la definició i obre la finestra Cutscene Outline per recórrer cada etapa amb una vista prèvia de Timeline en viu renderitzada a través de la càmera del propi rig, completament fora del mode Play.
  6. Crida ICutscenePlayerService.PlayAsync(id, ct) des del codi del joc, o despatxa la senyal de tret generada, per reproduir la cinemàtica en runtime.

Què inclou

  • ICutscenePlayerService.PlayAsync(id, ct) amb reproducció d'una passada o en bucle, autoacotada per timeouts durs de rellotge de paret
  • UnityCutsceneDefinition creada com a llista ordenada d'etapes UnityCutsceneStep — fosa d'entrada, fosa de sortida, reproduir Timeline, esperar, personalitzada
  • Assistent Cutscene Wizard de cinc passos — Template ▸ Stages ▸ Rig ▸ Trigger ▸ Create — amb disparador de reproducció sense codi i tasca d'arrencada opcionals
  • Finestra Cutscene Outline amb vista prèvia de Timeline en viu i navegable, renderitzada a través de la càmera del propi rig, sense necessitat de mode Play
  • Timeouts durs per etapa i per a la cinemàtica completa, segurs d'invocar des del pipeline d'arrencada sense arriscar una pantalla de presentació congelada
  • Overlay de fosa a pantalla completa dirigit automàticament per les etapes FadeIn/FadeOut, reutilitzat a totes les cinemàtiques
  • Construït sobre els contractes d'orquestració d'etapes del Reproductor de Seqüències genèric, mantinguts al marge de les preocupacions cinemàtiques
  • Registre al ServiceLocator perquè els disparadors generats i el codi del joc resolguin el reproductor sense cablejat manual de dependències

Quan fer-lo servir

  • Pantalles de presentació i cinemàtiques d'introducció que s'han de reproduir de manera segura durant l'arrencada, abans que la resta del joc s'hagi inicialitzat, inclòs WebGL.
  • Intros de caps, transicions de nivell o moments d'història que combinen un Timeline de Unity amb foses, creats sense escriure corrutines a mà.
  • Projectes que volen una manera sense codi de disparar una cinemàtica des d'un botó, una acció d'input o un volum de trigger a través d'una senyal generada.
  • Equips que necessiten revisar els temps i el contingut d'una cinemàtica a l'editor — recorrent cada etapa — sense entrar en mode Play cada vegada.

Sistemes relacionats

Fes servir Serenity quan vulguis cinemàtiques que es creen, previsualitzen i disparen sense codi, però que es reprodueixen amb les garanties dures de temporització que necessita una pantalla de presentació a l'arrencada.

Tornar a la pàgina principal