Cómo manejar el input del jugador en Unity (Input System para juegos indie)

El input del jugador es el puente directo entre la persona y el videojuego. Un control mal implementado puede arruinar una buena idea, mientras que un sistema de input bien diseñado mejora la experiencia desde el primer segundo. En proyectos indie, donde cada detalle cuenta, manejar correctamente el input es fundamental.
En este artículo aprenderás cómo manejar el input del jugador en Unity usando el nuevo Input System, con un enfoque práctico, modular y alineado a una arquitectura indie profesional.
Por qué dejar atrás el sistema clásico de Input
Durante años, Unity utilizó Input.GetAxis y Input.GetKey. Aunque funcionales, estos métodos presentan limitaciones:
- Dificultad para soportar múltiples dispositivos
- Poca flexibilidad para remapeo
- Código acoplado al hardware
El nuevo Input System soluciona estos problemas y se ha convertido en el estándar recomendado para proyectos nuevos.
Qué es el Input System de Unity
El Input System es un sistema basado en acciones, no en teclas. Esto significa que defines qué hace el jugador (moverse, saltar, disparar) y no qué botón presiona.
Esto permite:
- Soporte nativo para teclado, mouse, gamepad y más
- Remapeo sencillo
- Código más limpio y escalable
Configurando el Input System
Para comenzar, activa el Input System desde:
Edit → Project Settings → Player → Active Input Handling
Selecciona Input System Package (New) o Both.
Luego, crea un Input Actions Asset desde el Project Window.
Definiendo acciones básicas
Dentro del Input Actions Asset, crea un Action Map llamado Player y agrega acciones como:
- Move (Vector2)
- Jump (Button)
- Attack (Button)
Cada acción puede vincularse a múltiples dispositivos sin cambiar el código.
Creando un InputManager centralizado
Al igual que con escenas o eventos, es buena práctica centralizar el input. Crea un script InputManager.cs:
using UnityEngine;
using UnityEngine.InputSystem;
public class InputManager : MonoBehaviour
{
public static InputManager Instance;
public Vector2 MoveInput { get; private set; }
public bool JumpPressed { get; private set; }
private PlayerInputActions inputActions;
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
inputActions = new PlayerInputActions();
}
else
{
Destroy(gameObject);
}
}
private void OnEnable()
{
inputActions.Enable();
inputActions.Player.Move.performed += ctx => MoveInput = ctx.ReadValue();
inputActions.Player.Move.canceled += ctx => MoveInput = Vector2.zero;
inputActions.Player.Jump.performed += ctx => JumpPressed = true;
}
private void LateUpdate()
{
JumpPressed = false;
}
}
Este enfoque desacopla el input del comportamiento del jugador.
Usando el input desde otros scripts
El PlayerController solo consulta valores, no escucha teclas:
Vector2 movement = InputManager.Instance.MoveInput;
if (InputManager.Instance.JumpPressed)
{
Jump();
}
Esto facilita cambios futuros sin tocar el gameplay.
Integración con GameManager y estados
El Input System se integra perfectamente con un sistema de estados. Por ejemplo, puedes deshabilitar el input cuando el juego está en pausa o en un menú.
Esto mantiene el control total del flujo del juego desde un solo punto.
Buenas prácticas para input en juegos indie
- Usa acciones, no teclas directas
- Centraliza el input
- Permite remapeo cuando sea posible
- Evita lógica de input en múltiples scripts
Estas prácticas elevan significativamente la calidad del proyecto.
Conclusión: controles sólidos, juegos mejores
Manejar correctamente el input del jugador en Unity es un paso clave para cualquier videojuego indie. El Input System no solo moderniza el desarrollo, sino que también mejora la experiencia del jugador.
Una arquitectura clara y desacoplada hace que tu juego crezca sin volverse inmanejable.


