Input y movimiento: del teclado al gameplay

Implementa movimiento fluido leyendo entrada del jugador y aplicando desplazamiento consistente con el tiempo.

El input traduce acciones del jugador (teclas, mando, ratón) en decisiones de gameplay dentro del frame actual.

Para que el movimiento no dependa de FPS, multiplica por Time.deltaTime cuando uses desplazamiento por transform.

Input.GetAxis suaviza entrada y es útil para prototipos; para proyectos escalables conviene planificar migración al nuevo Input System.

Separar lectura de entrada y aplicación de movimiento simplifica depuración y evita scripts frágiles.

  • Empieza por capturar intención del jugador antes de mover nada.
  • `Input.GetAxis("Horizontal")` y `Input.GetAxis("Vertical")` devuelven valores continuos entre -1 y 1. Esa señal representa dirección e intensidad.
  • Para acciones puntuales (saltar, disparar), combina ejes con eventos discretos (`GetKeyDown`, `GetButtonDown`).
  • No mezcles decisiones de gameplay complejas en la lectura de entrada. Primero captura señal, luego procesa en métodos separados.
  • Ejes para movimiento continuo.

Lectura de input básico

Empieza por capturar intención del jugador antes de mover nada.

`Input.GetAxis("Horizontal")` y `Input.GetAxis("Vertical")` devuelven valores continuos entre -1 y 1. Esa señal representa dirección e intensidad.

Para acciones puntuales (saltar, disparar), combina ejes con eventos discretos (`GetKeyDown`, `GetButtonDown`).

No mezcles decisiones de gameplay complejas en la lectura de entrada. Primero captura señal, luego procesa en métodos separados.

  • Ejes para movimiento continuo.
  • Botones para acciones puntuales.
  • Separar captura de input y lógica de estado.

Movimiento independiente de FPS

Sin deltaTime, el juego se acelera o ralentiza según hardware.

Si trasladas un objeto por frame sin normalizar tiempo, en una máquina a 120 FPS se moverá el doble que en otra a 60 FPS.

La regla base es multiplicar velocidad por `Time.deltaTime` al usar movimiento basado en transform para mantener unidades por segundo estables.

Cuando uses física (`Rigidbody`), mueve en `FixedUpdate` y usa métodos de física para conservar comportamiento consistente.

Input legacy vs nuevo Input System

Prototipa rápido con legacy, escala con una capa de abstracción de input.

El sistema legacy (`Input`) es directo y útil para aprender, pero puede quedarse corto en remapeo avanzado o soporte complejo de dispositivos.

El nuevo Input System añade acciones configurables, esquemas por dispositivo y mejor arquitectura para proyectos medianos/grandes.

Decisión práctica: valida mecánicas con un input simple y migra cuando el diseño de controles esté estable.

Unity
06

Input y movimiento: del teclado al gameplay

Implementa movimiento fluido leyendo entrada del jugador y aplicando desplazamiento consistente con el tiempo.

Código del tema: GameObject + Component = comportamiento

📘 Teoría

Lectura de input básico

Empieza por capturar intención del jugador antes de mover nada.

`Input.GetAxis("Horizontal")` y `Input.GetAxis("Vertical")` devuelven valores continuos entre -1 y 1. Esa señal representa dirección e intensidad.

Para acciones puntuales (saltar, disparar), combina ejes con eventos discretos (`GetKeyDown`, `GetButtonDown`).

No mezcles decisiones de gameplay complejas en la lectura de entrada. Primero captura señal, luego procesa en métodos separados.

  • Ejes para movimiento continuo.
  • Botones para acciones puntuales.
  • Separar captura de input y lógica de estado.

Movimiento independiente de FPS

Sin deltaTime, el juego se acelera o ralentiza según hardware.

1

Si trasladas un objeto por frame sin normalizar tiempo, en una máquina a 120 FPS se moverá el doble que en otra a 60 FPS.

2

La regla base es multiplicar velocidad por `Time.deltaTime` al usar movimiento basado en transform para mantener unidades por segundo estables.

3

Cuando uses física (`Rigidbody`), mueve en `FixedUpdate` y usa métodos de física para conservar comportamiento consistente.

Movimiento simple con Input + deltaTime
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    public float speed = 5f;

    void Update()
    {
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");

        Vector3 dir = new Vector3(x, 0f, z);
        transform.Translate(dir * speed * Time.deltaTime, Space.World);
    }
}

Input legacy vs nuevo Input System

Prototipa rápido con legacy, escala con una capa de abstracción de input.

1

El sistema legacy (`Input`) es directo y útil para aprender, pero puede quedarse corto en remapeo avanzado o soporte complejo de dispositivos.

2

El nuevo Input System añade acciones configurables, esquemas por dispositivo y mejor arquitectura para proyectos medianos/grandes.

3

Decisión práctica: valida mecánicas con un input simple y migra cuando el diseño de controles esté estable.

🧪 Aprende probando

Ejemplo Ejemplo guiado Amplía el script para limitar velocidad máxima o añadir sprint con una tecla.

🏁 Retos

Reto Reto práctico Añade una variable `sprintMultiplier` y activa sprint cuando se pulse LeftShift.

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .