Integració de l'Input System
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.
El moviment del gamepad entra pel mateix gateway: DualSense, DualShock 4 i Switch Pro exposen l'estat de giroscopi i acceleròmetre a través d'una lectura compartida SerenityGamepadMotion darrere del contracte IMotionCapableGamepad, amb un GamepadGyroCalibrator que s'encarrega del calibratge de deriva perquè un comandament que porta una estona quiet no desviï lentament l'apuntat. Gyro Aim i Gyro Sensitivity apareixen com a opcions de cara al jugador al menú d'ajustos de Controls, servides per la mateixa superfície d'ajustos que qualsevol altra preferència d'input.
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.
El pas Definition de l'assistent Create Player Input pot ara crear l'asset .inputactions per si mateix en lloc d'exigir que ja n'existeixi un — tria «Create New…» i desa un asset d'Input Actions nou sobre el qual construir. Per depurar el maquinari de moviment, Tools ▸ Serenity ▸ Debug ▸ Gamepad Motion Monitor mostra els valors de giroscopi i acceleròmetre en viu per comandament connectat, així que ajustar Gyro Sensitivity o diagnosticar un comandament amb deriva no requereix prints.
Flux de treball pràctic
- Configura el teu asset d'Input Actions de Unity com de costum i assigna'l al projecte, o deixa que l'assistent Create Player Input en creï un de nou per tu.
- Configura els ajustos del player input service per definir encaminament i comportament de join.
- Decideix quin mode d'interacció d'UI s'aplica mitjançant PlayerInputUiInteractionMode.
- Deixa que l'instal·lador de l'input registri els serveis a la pipeline d'inicialització.
- Fes servir IUiInputRouter des de menús i modals perquè rebin input només quan toca.
- Fes servir IPlayerInputJoinService per acceptar o rebutjar dispositius que s'uneixen a la sessió.
- Amb comandaments amb sensors de moviment, exposa Gyro Aim i Gyro Sensitivity al menú de Controls i obre el Gamepad Motion Monitor per verificar lectures i calibratge.
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
- Giroscopi i acceleròmetre de gamepad a DualSense, DualShock 4 i Switch Pro mitjançant SerenityGamepadMotion i IMotionCapableGamepad, amb GamepadGyroCalibrator per al calibratge de deriva
- Opcions Gyro Aim i Gyro Sensitivity de cara al jugador al menú d'ajustos de Controls
- Finestra de depuració Gamepad Motion Monitor (Tools ▸ Serenity ▸ Debug ▸ Gamepad Motion Monitor) per afinar el moviment en viu per comandament
- L'assistent Create Player Input pot crear un asset .inputactions completament nou al moment, en lloc d'exigir-ne un d'existent
- 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.
- Jocs que afegeixen apuntat per giroscopi a DualSense, DualShock 4 o Switch Pro i necessiten calibratge de deriva i una finestra de depuració en lloc de parsejar HID a mà.
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.
English
Español
Català