Integración del Input System de Unity
Un gateway de player input que encamina las acciones del Input System de Unity a menús, gameplay y navegación de UI a través de servicios limpios.
Para qué sirve este sistema
El input en Unity ha mejorado mucho con el paquete Input System, pero cada proyecto sigue escribiendo el mismo código de conexión. Componentes PlayerInput, action assets, lógica de join, navegación de UI y acciones de gameplay tienen que ponerse de acuerdo sobre qué dispositivo es primario, qué jugador ocupa qué slot y qué pantalla manda en el input en cada momento.
El Input Gateway de Serenity centraliza ese enrutado. Expone servicios tipados para player input, comportamiento de join y enrutado de UI, y evita que menús, gameplay y join multijugador se pisen entre sí.
El problema en Unity
Un proyecto Unity pequeño puede salir adelante con un único componente PlayerInput. Uno real, no. El menú de ajustes debe aceptar input incluso con el gameplay pausado. La navegación de UI debe funcionar con gamepad además de con teclado y ratón. El modal de pausa no debe dejar pasar acciones de gameplay. El join multijugador necesita un momento definido para que nuevos dispositivos entren en la sesión y otro definido para rechazarlos. Nada de eso se resuelve de serie.
Sin una capa de enrutado, esas preocupaciones se responden a medida en cada escena. El resultado son bugs de input que solo aparecen en dispositivos concretos, en menús concretos o en transiciones concretas entre gameplay y UI.
Cómo lo aborda Serenity
Serenity expone el input a través de IPlayerInputService e IPlayerInputJoinService para player input y comportamiento de join, IUiInputRouter para enrutar input de UI, IPrimaryDeviceSelector para seguir qué dispositivo es primario e IPrimaryInputGate para abrir o cerrar el flujo de input primario. Los slots de jugador los modelan IPlayerInputSlots y PlayerInputSlot, con PrimaryJoinInfo describiendo el estado de join.
El comportamiento se configura mediante enums como InputDeviceKind, PlayerInputJoinBehavior y PlayerInputUiInteractionMode, además de interfaces de ajustes IPlayerInputServiceSettingsDefinition, IPlayerInputRoutingSettings, IPlayerInputDeviceFilterSettings e IPlayerInputJoinGateSettings. Las factorías dan puntos de creación para que la implementación Unity se pueda sustituir.
Cómo encaja en Serenity
Input Gateway vive en el namespace Serenity.InputGateway y sigue la estructura por capas de la foundation. La capa de Dominio define enums, interfaces y structs. La capa de Aplicación expone los servicios y las interfaces de factoría. Los ajustes para join, enrutado y filtrado de dispositivo viven detrás de interfaces dedicadas para que la implementación pueda cambiar sin tocar a los consumidores.
Input Gateway coopera estrechamente con el Sistema de Menús para la navegación con gamepad y teclado, con el Sistema de Modales para abrir y cerrar input cuando hay un modal en pantalla, con Game Mode para que el modo activo influya en el enrutado y con el Event Dispatcher para cualquier señal relacionada con input que el proyecto decida publicar.
Flujo de trabajo práctico
- Configura tu asset de Input Actions de Unity como de costumbre y asígnalo al proyecto.
- Configura los ajustes del player input service para definir enrutado y comportamiento de join.
- Decide qué modo de interacción de UI aplica mediante PlayerInputUiInteractionMode.
- Deja que el instalador del input registre los servicios en la pipeline de inicialización.
- Usa IUiInputRouter desde menús y modales para que reciban input solo cuando toca.
- Usa IPlayerInputJoinService para aceptar o rechazar dispositivos que se unen a la sesión.
Qué incluye
- Servicio de player input IPlayerInputService y servicio de join IPlayerInputJoinService
- Enrutador de input de UI IUiInputRouter para enrutado consciente de la pantalla
- Selector de dispositivo primario IPrimaryDeviceSelector y puerta de input primario IPrimaryInputGate
- Slots de jugador e info de join descritos mediante IPlayerInputSlots y PrimaryJoinInfo
- Enums configurables InputDeviceKind, PlayerInputJoinBehavior y PlayerInputUiInteractionMode
- Interfaces de ajustes para enrutado, filtrado de dispositivo y gating de join
- Factorías que mantienen la implementación Unity reemplazable
- Integración con menús, modales y game mode a través de señales compartidas
Cuándo usarlo
- Proyectos que necesitan que la navegación de menús y el input de gameplay se manejen de forma coherente entre dispositivos.
- Juegos que soportan gamepad, teclado y ratón y necesitan un enrutado limpio entre ellos.
- Proyectos multijugador que necesitan un comportamiento de join definido y slots de jugador.
- Bases de código que quieren que el input se controle por la pantalla actual o el modo de juego en vez de por booleanos ad hoc.
Sistemas relacionados
Usa Serenity cuando quieras un enrutado de input que ya habla con menús, modales y game mode, pero que te sigue dejando mantener tu propio asset de Input Actions como única fuente de verdad.
English
Español
Català