Integración del Input System
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.
El movimiento del gamepad entra por el mismo gateway: DualSense, DualShock 4 y Switch Pro exponen el estado de giroscopio y acelerómetro a través de una lectura compartida SerenityGamepadMotion tras el contrato IMotionCapableGamepad, con un GamepadGyroCalibrator que se encarga de la calibración de deriva para que un mando que lleva un rato quieto no desvíe lentamente el apuntado. Gyro Aim y Gyro Sensitivity aparecen como opciones de cara al jugador en el menú de ajustes de Controles, servidas por la misma superficie de ajustes que cualquier otra preferencia de input.
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.
El paso Definition del asistente Create Player Input puede ahora crear el asset .inputactions por sí mismo en lugar de exigir que ya exista uno — elige «Create New…» y guarda un asset de Input Actions nuevo sobre el que construir. Para depurar el hardware de movimiento, Tools ▸ Serenity ▸ Debug ▸ Gamepad Motion Monitor muestra los valores de giroscopio y acelerómetro en vivo por mando conectado, así que ajustar Gyro Sensitivity o diagnosticar un mando con deriva no requiere prints.
Flujo de trabajo práctico
- Configura tu asset de Input Actions de Unity como de costumbre y asígnalo al proyecto, o deja que el asistente Create Player Input cree uno nuevo por ti.
- 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.
- Con mandos con sensores de movimiento, expón Gyro Aim y Gyro Sensitivity en el menú de Controles y abre el Gamepad Motion Monitor para verificar lecturas y calibració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
- Giroscopio y acelerómetro de gamepad en DualSense, DualShock 4 y Switch Pro mediante SerenityGamepadMotion e IMotionCapableGamepad, con GamepadGyroCalibrator para la calibración de deriva
- Opciones Gyro Aim y Gyro Sensitivity de cara al jugador en el menú de ajustes de Controles
- Ventana de depuración Gamepad Motion Monitor (Tools ▸ Serenity ▸ Debug ▸ Gamepad Motion Monitor) para afinar el movimiento en vivo por mando
- El asistente Create Player Input puede crear un asset .inputactions completamente nuevo en el momento, en lugar de exigir uno existente
- 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.
- Juegos que añaden apuntado por giroscopio en DualSense, DualShock 4 o Switch Pro y necesitan calibración de deriva y una ventana de depuración en lugar de parsear HID a mano.
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à