Integració de l'Input System de Unity

Un gateway de player input que encamina les accions de l'Input System de Unity a menús, gameplay i navegació d'UI a través de serveis nets.

Per a què serveix aquest sistema

L'input a Unity ha millorat molt amb el paquet Input System, però cada projecte segueix escrivint el mateix codi de connexió. Components PlayerInput, action assets, lògica de join, navegació d'UI i accions de gameplay s'han de posar d'acord sobre quin dispositiu és primari, quin jugador ocupa quin slot i quina pantalla mana en l'input a cada moment.

L'Input Gateway de Serenity centralitza aquest encaminament. Exposa serveis tipats per a player input, comportament de join i encaminament d'UI, i evita que menús, gameplay i join multijugador es trepitgin entre si.

El problema a Unity

Un projecte Unity petit pot sortir-se'n amb un únic component PlayerInput. Un de real, no. El menú d'ajustos ha d'acceptar input fins i tot amb el gameplay pausat. La navegació d'UI ha de funcionar amb gamepad a més de teclat i ratolí. El modal de pausa no ha de deixar passar accions de gameplay. El join multijugador necessita un moment definit perquè nous dispositius entrin en la sessió i un altre definit per rebutjar-los. Res d'això es resol de sèrie.

Sense una capa d'encaminament, aquestes preocupacions es responen a mida a cada escena. El resultat són bugs d'input que només apareixen en dispositius concrets, en menús concrets o en transicions concretes entre gameplay i UI.

Com ho aborda Serenity

Serenity exposa l'input a través d'IPlayerInputService i IPlayerInputJoinService per a player input i comportament de join, IUiInputRouter per encaminar input d'UI, IPrimaryDeviceSelector per seguir quin dispositiu és primari i IPrimaryInputGate per obrir o tancar el flux d'input primari. Els slots de jugador els modelen IPlayerInputSlots i PlayerInputSlot, amb PrimaryJoinInfo descrivint l'estat de join.

El comportament es configura mitjançant enums com InputDeviceKind, PlayerInputJoinBehavior i PlayerInputUiInteractionMode, a més d'interfícies d'ajustos IPlayerInputServiceSettingsDefinition, IPlayerInputRoutingSettings, IPlayerInputDeviceFilterSettings i IPlayerInputJoinGateSettings. Les factories donen punts de creació perquè la implementació Unity es pugui substituir.

Com encaixa a Serenity

Input Gateway viu al namespace Serenity.InputGateway i segueix l'estructura per capes de la foundation. La capa de Domini defineix enums, interfícies i structs. La capa d'Aplicació exposa els serveis i les interfícies de factoria. Els ajustos per a join, encaminament i filtratge de dispositiu viuen darrere d'interfícies dedicades perquè la implementació pugui canviar sense tocar els consumidors.

Input Gateway coopera estretament amb el Sistema de Menús per a la navegació amb gamepad i teclat, amb el Sistema de Modals per obrir i tancar input quan hi ha un modal a la pantalla, amb Game Mode perquè el mode actiu influeixi en l'encaminament i amb l'Event Dispatcher per a qualsevol senyal relacionada amb input que el projecte decideixi publicar.

Flux de treball pràctic

  1. Configura el teu asset d'Input Actions de Unity com de costum i assigna'l al projecte.
  2. Configura els ajustos del player input service per definir encaminament i comportament de join.
  3. Decideix quin mode d'interacció d'UI s'aplica mitjançant PlayerInputUiInteractionMode.
  4. Deixa que l'instal·lador de l'input registri els serveis a la pipeline d'inicialització.
  5. Fes servir IUiInputRouter des de menús i modals perquè rebin input només quan toca.
  6. Fes servir IPlayerInputJoinService per acceptar o rebutjar dispositius que s'uneixen a la sessió.

Què inclou

  • Servei de player input IPlayerInputService i servei de join IPlayerInputJoinService
  • Encaminador d'input d'UI IUiInputRouter per a encaminament conscient de la pantalla
  • Selector de dispositiu primari IPrimaryDeviceSelector i porta d'input primari IPrimaryInputGate
  • Slots de jugador i info de join descrits mitjançant IPlayerInputSlots i PrimaryJoinInfo
  • Enums configurables InputDeviceKind, PlayerInputJoinBehavior i PlayerInputUiInteractionMode
  • Interfícies d'ajustos per a encaminament, filtratge de dispositiu i gating de join
  • Factories que mantenen la implementació Unity reemplaçable
  • Integració amb menús, modals i game mode a través de senyals compartides

Quan fer-lo servir

  • Projectes que necessiten que la navegació de menús i l'input de gameplay es gestionin de manera coherent entre dispositius.
  • Jocs que suporten gamepad, teclat i ratolí i necessiten un encaminament net entre ells.
  • Projectes multijugador que necessiten un comportament de join definit i slots de jugador.
  • Bases de codi que volen que l'input es controli per la pantalla actual o el mode de joc en lloc de per booleans ad hoc.

Sistemes relacionats

Utilitza Serenity quan vulguis un encaminament d'input que ja parla amb menús, modals i game mode, però que et segueix deixant mantenir el teu propi asset d'Input Actions com a única font de veritat.

Tornar a la pàgina principal