Sistema de HUD

Un HUD és un conjunt d'elements ancorats i vinculats a dades reals del joc mitjançant cadenes configurades — es construeix visualment, es valida automàticament i evoluciona sense migracions.

Per a què serveix aquest sistema

Un HUD a Unity sol començar com un grapat de components Text i Image actualitzats des de crides a Update() disperses, una per cada sistema que necessita mostrar alguna cosa. La vida, la munició i els temporitzadors acaben cadascun amb el seu propi cablejat a mida, i afegir un element nou significa escriure codi de binding nou en lloc de configurar-lo.

El sistema de HUD de Serenity tracta el HUD com a dades configurades, no com a components cablejats a mà. Cada element s'ancora a una de nou posicions amb la direcció de creixement com a eix independent, es pot reflectir per jugador i es vincula a dades de joc en viu mitjançant una cadena de lectures sobre els serveis de Serenity basats en snapshots — tot configurat visualment a HUD Builder i editat directament a HUD Preview.

El problema a Unity

Els elements de HUD cablejats a mà acoblen el codi d'interfície directament als serveis del joc: cada element nou és C# nou, i cada mètode reanomenat, una fallada silenciosa en temps d'execució. Col·locar un element per a un segon jugador sol implicar duplicar el layout a mà, i un element que no pot resoldre la seva font de dades normalment llança una excepció o no mostra res, sense explicar-ne el motiu.

Sense una representació compartida de com es dibuixa un valor, les barres de vida, els comptadors de munició i els temporitzadors reinventen cadascun el seu format — precisió, emplenat, capacitat — i un dissenyador que vol moure un element mig píxel a l'esquerra necessita un programador per fer-ho.

Com ho aborda Serenity

La posició d'un element fa servir l'UiAnchorType de nou ancoratges amb la direcció de creixement com a eix a part, de manera que un comptador de munició a baix a la dreta pot créixer de dreta a esquerra. Els elements es poden associar a un jugador i reflectir-se automàticament — l'element del P1 a baix a l'esquerra esdevé el del P2 a baix a la dreta sense configurar-lo dues vegades. Un binding és una font més una cadena ordenada de lectures amb arguments constants sobre els serveis basats en snapshots; els mètodes d'estil Try aporten el seu valor out, una font de servei es resol de manera diferida i queda fixada només quan resol amb èxit, i un binding sense resoldre mostra el text de reserva de l'element i n'informa del motiu en lloc de llançar una excepció.

Set representacions cobreixen les maneres de dibuixar un valor: text, número (precisió, emplenat de zeros, separador de milers), temps (inclòs l'estil arcade MM'SS"CC), pila, segmentat, indicador i conjunt d'icones. Les tres que dibuixen la part buida a més de la plena requereixen un binding de capacitat, i aquesta regla viu en un únic lloc compartit que llegeixen l'editor, el runtime i el validador.

Com encaixa a Serenity

HUD Builder (Tools ▸ Serenity ▸ Create ▸ UI ▸ HUD Builder) crea i edita els assets de HUD amb un selector de membres guiat: el desplegable de cada pas es construeix a partir del tipus que va produir el pas anterior, de manera que només es poden configurar cadenes que de debò resolen. Un validador dedicat, hud-bindings, detecta bindings que han deixat de resoldre, representacions sense el seu binding de capacitat i ids duplicats — de manera interactiva o headless en CI.

HUD Preview renderitza el HUD amb les vistes d'element reals del runtime a la resolució, el tema i el fons triats, i és una superfície d'edició per manipulació directa: arrossega per moure, estira una cantonada o una vora per escalar (deformació lliure per defecte, amb Shift per mantenir les proporcions), gira amb el tirador tipus lollipop o just fora d'una cantonada, ajusta a la graella amb Ctrl, fixa el pivot al centre amb Alt i cancel·la amb Escape — cada gest és un únic pas de desfer. Els camps Rotation i Stretch per eix no requereixen migrar els assets existents, i el reflex continua sent una imatge especular fidel. Cada tema pot aportar un slot HudElementTemplate per vestir els elements amb el seu propi llenguatge visual.

Flux de treball pràctic

  1. Obre HUD Builder i afegeix elements, ancorant cadascun amb UiAnchorType i una direcció de creixement.
  2. Configura el binding de cada element com una cadena: tria un servei d'origen i encadena lectures amb el selector de membres guiat fins a resoldre un valor mostrable.
  3. Tria una representació — text, número, temps, pila, segmentat, indicador o conjunt d'icones — i defineix el binding de capacitat a les que el necessitin.
  4. Associa a un jugador els elements que ho requereixin i deixa que el reflex generi el layout del costat oposat en lloc de configurar-lo dues vegades.
  5. Obre HUD Preview per arrossegar, escalar i girar els elements directament a la resolució i el tema de destinació, amb cada gest com un únic pas de desfer.
  6. Executa el validador hud-bindings, interactiu o en CI, per detectar bindings sense resoldre, capacitats absents o ids duplicats abans que arribin als jugadors.

Què inclou

  • Posicionament amb UiAnchorType de nou ancoratges i direcció de creixement com a eix independent
  • Elements associats a un jugador amb reflex automàtic — es configura una vegada i serveix per als dos costats
  • Cadenes de binding sobre serveis basats en snapshots, amb resolució diferida que es fixa al primer èxit
  • Text de reserva amb el motiu informat, en lloc d'excepcions, per als bindings sense resoldre
  • Set representacions: text, número, temps (incl. MM'SS"CC), pila, segmentat, indicador i conjunt d'icones
  • HUD Builder amb selector de membres guiat per tipus per configurar les cadenes de binding
  • HUD Preview com a superfície de manipulació directa — arrossegar, escalar i girar, cada gest en un únic desfer
  • Validador hud-bindings per a bindings sense resoldre, capacitat absent i ids duplicats, interactiu o en CI

Quan fer-lo servir

  • Jocs que necessiten barres de vida, comptadors de munició, temporitzadors o qualsevol dada en viu en pantalla sense escriure codi d'actualització per element.
  • HUDs de pantalla dividida o multijugador local que necessiten el layout del segon jugador reflectit sense duplicar configuració.
  • Equips que volen un HUD editable pel dissenyador — posició, binding i aspecte — sense un programador pel mig a cada ajust.
  • Projectes que volen que la CI detecti un binding trencat per un canvi de nom abans que es publiqui com un element en blanc.

Sistemes relacionats

Fes servir Serenity quan vulguis un HUD que sigui dades configurades en lloc de codi d'interfície dispers — vinculat a serveis reals, editable arrossegant i validat abans d'arribar al jugador.

Tornar a la pàgina principal