How do I configure an Xbox controller for user input in Unity?

Configura tu Mando de Xbox en Unity: Guía Completa

24/03/2009

Valoración: 4.03 (6188 votos)

Darle a los jugadores la opción de usar un mando es casi un estándar en el desarrollo de videojuegos moderno, especialmente para títulos de PC y consola. La sensación táctil y la precisión de un gamepad como el de Xbox pueden transformar completamente la experiencia de juego. Afortunadamente, Unity ha simplificado enormemente este proceso con su nuevo y potente Input System. Si alguna vez te has preguntado cómo dejar atrás el antiguo Input Manager y dar el salto a un sistema más flexible y robusto, estás en el lugar correcto. En esta guía completa, te llevaremos de la mano a través de cada paso necesario para configurar un mando de Xbox en tu proyecto de Unity, desde la instalación del paquete hasta la asignación de botones y ejes para el movimiento del personaje.

Does Unity support input control?
According to recent announcements from Unity devs, they are working on a new approach for input control. However, this feature might not be available yet. In the meantime, some users have created their own classes to handle input control.
Índice de Contenido

¿Por Qué Usar el Nuevo Input System?

Antes de sumergirnos en la configuración, es válido preguntarse: ¿qué tiene de especial este nuevo sistema? El antiguo Input Manager, aunque funcional, era rígido y estaba definido globalmente en los Project Settings. El nuevo Input System, en cambio, es modular, basado en assets y extremadamente flexible. Permite crear esquemas de control para diferentes dispositivos (mando, teclado y ratón, VR), cambiar entre ellos sobre la marcha y manejar las entradas de una manera mucho más organizada y escalable a través de Action Maps y Actions. Esto significa menos código desordenado y una gestión de controles mucho más limpia para tu proyecto.

Comparativa: Antiguo Input Manager vs. Nuevo Input System
CaracterísticaAntiguo Input ManagerNuevo Input System
FlexibilidadLimitada a ejes y botones predefinidos.Alta, basada en acciones abstractas (Saltar, Disparar) que se mapean a controles.
Soporte de DispositivosBásico, requiere mucha configuración manual para nuevos dispositivos.Extensivo y "plug-and-play" para la mayoría de mandos modernos.
Gestión de ContextoNo tiene un sistema de contexto. Los inputs están siempre activos.Permite habilitar/deshabilitar sets de controles (Action Maps) para diferentes contextos (Menú, Jugando, Conduciendo).
ConfiguraciónCentralizada en Project Settings > Input Manager.Mediante Assets de Input Actions, que son portables y reutilizables.

Paso 1: Instalar y Activar el Paquete

Lo primero es lo primero: necesitamos añadir el Input System a nuestro proyecto. Si estás empezando un proyecto nuevo, es el momento ideal para hacerlo.

  1. Ve al menú superior y selecciona Window > Package Manager.
  2. En la ventana del Package Manager, asegúrate de que en el menú desplegable de la parte superior izquierda esté seleccionado "Packages: Unity Registry".
  3. En la barra de búsqueda, escribe "Input System" y selecciónalo de la lista.
  4. Haz clic en el botón "Install" en la esquina inferior derecha.
  5. Una vez instalado, Unity te mostrará una advertencia preguntándote si quieres habilitar el nuevo sistema. Al hacerlo, se desactivará el antiguo Input Manager. Haz clic en "Yes". El editor de Unity se reiniciará para aplicar los cambios.

Para verificar que todo se ha configurado correctamente, ve a Edit > Project Settings. En la columna de la izquierda, selecciona Player. En la ventana principal, busca la sección Other Settings y desplázate hacia abajo hasta encontrar la opción Active Input Handling. Debería estar configurada como "Input System Package (New)" o "Both". La opción "Both" es útil si necesitas migrar un proyecto antiguo poco a poco, pero para proyectos nuevos, es recomendable usar solo el nuevo sistema.

Paso 2: Creando tu Archivo de Acciones (Input Actions)

El corazón del nuevo sistema es el asset de Input Actions. Este archivo contendrá todas las definiciones de las acciones que un jugador puede realizar, independientemente del dispositivo que utilice.

  1. En la ventana de Project, haz clic derecho y selecciona Create > Input Actions.
  2. Nombra este nuevo archivo de una manera descriptiva, por ejemplo, "PlayerControls" o "InputMaster".
  3. Haz doble clic en este nuevo asset para abrir la ventana de edición de Input Actions.

Esta nueva ventana puede parecer intimidante al principio, pero la dividiremos en partes manejables: Control Schemes, Action Maps y Actions.

Paso 3: Definiendo un Esquema de Control para Xbox

Un Control Scheme agrupa un conjunto de dispositivos necesarios para una configuración de control. Por ejemplo, podrías tener un esquema para "Teclado y Ratón" y otro para "Gamepad".

  1. En la parte superior izquierda de la ventana de Input Actions, haz clic donde dice "No Control Schemes" y selecciona "Add Control Scheme...".
  2. Nombra el esquema como "Xbox Control Scheme".
  3. Haz clic en el botón `+` bajo la lista de "Required Devices" y selecciona Gamepad > Xbox Controller.
  4. Haz clic en "Save" para guardar tu nuevo esquema.

Paso 4: Creando Action Maps y Actions

Un Action Map es un conjunto de acciones para un contexto específico. Por ejemplo, podrías tener un Action Map "Player" para cuando el jugador controla al personaje, y otro "UI" para navegar por los menús.

  1. En el panel izquierdo ("Action Maps"), haz clic en el `+` para crear un nuevo mapa. Renómbralo a "Player".
  2. Con el mapa "Player" seleccionado, el panel central ("Actions") mostrará una acción por defecto. Una Action es una entrada lógica, como "Saltar" o "Moverse".

Configurando una Acción Simple: Salto

Vamos a configurar una acción de salto que se activará al presionar un botón.

  1. Haz doble clic en la "New Action" y renómbrala a "Jump".
  2. A la derecha de la acción "Jump", verás que dice <No Binding>. Un Binding es el vínculo entre una acción y un control físico específico (un botón, un stick, una tecla).
  3. Haz clic en el `+` a la derecha de la acción y selecciona "Add Binding".
  4. En el panel derecho ("Properties"), haz clic en el menú desplegable "Path".
  5. Se abrirá una ventana para seleccionar el control. Puedes navegar a través de Gamepad > Xbox Controller y buscar el botón que desees, como "Button South" (que corresponde al botón A en un mando de Xbox).
  6. Consejo profesional: Una forma mucho más rápida y sencilla es usar el botón Listen. Haz clic en él y luego presiona el botón A en tu mando de Xbox conectado. El sistema lo detectará y asignará automáticamente.

Configurando una Acción Compleja: Movimiento

El movimiento con el stick analógico no es un simple botón, sino un valor de dos ejes (X e Y). El Input System lo maneja de forma elegante.

  1. En el Action Map "Player", crea una nueva acción y llámala "Movement".
  2. En el panel de propiedades de la derecha, cambia el "Action Type" a "Pass Through" y el "Control Type" a "Vector 2". Esto le dice al sistema que espere un valor continuo de dos dimensiones.
  3. Haz clic en el `+` junto a la acción "Movement" y selecciona "Add 2D Vector Composite".
  4. Esto creará cuatro bindings: Up, Down, Left y Right. Ahora, debemos asignar cada uno al stick izquierdo del mando.
  5. Selecciona "Up", ve a su "Path" y elige Gamepad > Left Stick > Up.
  6. Repite el proceso para Down, Left y Right, asignándolos a las direcciones correspondientes del Left Stick.
  7. ¡No olvides hacer clic en "Save Asset" en la parte superior de la ventana para guardar todos tus cambios!

Paso 5: Conectando las Acciones a un GameObject

Ahora que hemos definido nuestros controles, necesitamos que un objeto en nuestra escena los escuche. Aquí es donde entra el componente Player Input.

  1. Selecciona tu objeto Jugador en la jerarquía.
  2. En el Inspector, haz clic en "Add Component" y busca y añade el componente "Player Input".
  3. Arrastra tu asset "InputMaster" desde la ventana de Project al campo "Actions" del componente Player Input.
  4. Configura el "Default Scheme" a "Xbox Control Scheme" y el "Default Map" a "Player".
  5. El campo "Behavior" determina cómo se notificarán los eventos de input. "Send Messages" o "Invoke Unity Events" son buenas opciones para empezar sin escribir mucho código, pero para un control total, usaremos la generación de una clase C#.

Paso 6: Generando el Script C# y Usándolo

La forma más potente de usar el Input System es generando una clase C# a partir de tu asset de acciones. Esto te da acceso directo y tipado a todas tus acciones en el código.

  1. Selecciona tu asset "InputMaster" en la ventana de Project.
  2. En el Inspector, marca la casilla "Generate C# Class" y haz clic en "Apply".
  3. Unity creará automáticamente un script con el mismo nombre ("InputMaster.cs"). Puedes abrirlo para ver cómo está estructurado. Contendrá interfaces y propiedades para tus Action Maps y Actions.

Ahora, en tu script de control de personaje, puedes obtener una referencia a estas acciones y suscribirte a sus eventos para ejecutar la lógica del juego. Por ejemplo, podrías habilitar y deshabilitar el Action Map y leer los valores de movimiento en el método Update() o reaccionar a eventos como performed para el salto.

Preguntas Frecuentes (FAQ)

¿Puedo usar este método para un mando de PlayStation u otro gamepad?
¡Absolutamente! El proceso es idéntico. Simplemente, al crear el Control Scheme, en lugar de seleccionar "Xbox Controller", selecciona "PlayStation Controller" o "Gamepad" genérico. El sistema es lo suficientemente inteligente como para mapear la mayoría de los controles comunes.
¿Qué hago si quiero soportar tanto teclado como mando?
Puedes crear un segundo Control Scheme llamado "KeyboardAndMouse" y añadir los dispositivos de teclado y ratón. Luego, en tus acciones ("Jump", "Movement"), puedes añadir bindings adicionales para las teclas (ej. Barra espaciadora para saltar, teclas WASD para moverse). El sistema usará automáticamente el esquema del último dispositivo que se usó.
¿Es obligatorio generar la clase C#?
No, no es obligatorio. Puedes usar la opción "Behavior" del componente Player Input para invocar eventos de Unity o enviar mensajes a funciones de tu script (como OnJump() o OnMove(InputValue value)). Sin embargo, la clase generada ofrece un mayor control, mejor rendimiento y es la práctica recomendada para proyectos complejos.

Configurar un mando de Xbox en Unity ha pasado de ser una tarea tediosa a un proceso lógico y estructurado gracias al nuevo Input System. Aunque la configuración inicial requiere más pasos que el antiguo sistema, la flexibilidad, escalabilidad y organización que ganas a cambio son invaluables para cualquier proyecto serio. Ahora que tienes las bases, ¡experimenta con diferentes tipos de acciones e interacciones para llevar el control de tu juego al siguiente nivel!

Si quieres conocer otros artículos parecidos a Configura tu Mando de Xbox en Unity: Guía Completa puedes visitar la categoría Juegos.

Subir