Controlar el movimiento de un personaje es el primer paso real en cualquier juego, y hacerlo bien desde el inicio marca la diferencia. El New Input System de Unity ofrece una forma robusta y flexible de capturar las acciones del jugador, compatible con múltiples plataformas sin reescribir código. A continuación se explica cómo instalarlo, configurarlo y programar el movimiento básico de un personaje usando Rigidbody y C# scripting.
¿Cómo instalar el New Input System en Unity?
El proceso comienza en Window > Package Manager [0:18]. Dentro del registro de paquetes de Unity, se busca Input System y se presiona Install. Unity descargará e importará todos los assets necesarios. Es muy probable que el editor se reinicie durante la instalación, ya que necesita actualizar componentes internos de su core.
Una vez reiniciado, se accede a Edit > Project Settings y, dentro de Input Manager, aparece una alerta indicando que existe otro sistema de inputs disponible [1:00]. En la pestaña Input System Package se crea un nuevo settings asset con un clic. Las configuraciones por defecto funcionan perfectamente para un proyecto inicial, así que no hace falta modificar nada más.
¿Cómo configurar el Player Input y los Action Maps?
De vuelta en la escena, se selecciona el objeto del personaje y se le cambia el nombre a player [1:30]. Para que este objeto responda a las entradas del jugador, se le agrega el componente Player Input, que se encuentra buscando "player" o "input" en el inspector.
Este componente solicita un Action Input Asset. Como no existe uno, se crea con el botón Create Action [1:52]. Unity genera un archivo que contiene los Action Maps predefinidos:
- Player: gestiona todos los inputs relacionados con el personaje.
- Acciones predefinidas: move, look y fire, cada una con bindings para gamepad, teclado WASD y joysticks [2:20].
El Action Map llamado move devuelve un Vector2 con el action type configurado como value y control type como Vector2 [3:20]. Esto significa que se reciben dos números que representan el movimiento horizontal y vertical.
¿Qué es el Behaviour Send Messages?
Dentro del componente Player Input, la propiedad Behaviour se establece en Send Messages [3:00]. Esto hace que Unity envíe mensajes automáticamente al script adjunto cuando detecta una acción. Uno de esos mensajes se llama OnMove, y es el que se usa para capturar el movimiento.
¿Cómo programar el movimiento con Rigidbody y Fixed Update?
Se crea un nuevo script en C# con dos variables float: movementX y movementY [3:40]. Dentro del método OnMove, se recibe un parámetro de tipo InputValue y se extrae un Vector2 con el método Get<Vector2>():
csharp
private float movementX;
private float movementY;
void OnMove(InputValue movementValue)
{
Vector2 movementVector = movementValue.Get<Vector2>();
movementX = movementVector.x;
movementY = movementVector.y;
}
Para aplicar el movimiento se utiliza FixedUpdate en lugar de Update [4:20]. El FixedUpdate es un ciclo de actualización más estable para cálculos de física, especialmente cuando se trabaja con un Rigidbody. La velocidad se asigna directamente:
csharp
void FixedUpdate()
{
rb.velocity = new Vector2(movementX, movementY) * speed;
}
¿Qué errores comunes aparecen al configurar el movimiento?
Un error frecuente es olvidar asignar el script al objeto del personaje [4:50]. Al presionar Play y notar que el personaje no responde, se debe verificar que el componente Player Controller esté efectivamente añadido al player.
Otro detalle importante es la gravedad del Rigidbody. Por defecto, el Rigidbody aplica gravedad y el personaje cae. Para un juego tipo avión en 2D, se establece la Gravity Scale en cero [5:15].
Finalmente, se crea una variable pública de tipo entero llamada speed para controlar la velocidad [5:30]. Si se deja en cero, el personaje nunca se moverá porque cualquier valor multiplicado por cero es cero. Un valor inicial de 2 ofrece un movimiento fluido y proporcional al espacio de pantalla disponible.
¿Ya probaste el New Input System en tus proyectos? Comparte tu experiencia y las dificultades que encontraste en los comentarios.