Aprende a crear un controlador de jugador en Unity paso a paso: desde configurar el Input Manager hasta programar el movimiento en C# con Input.GetAxisRaw, Mathf.Abs, Time.deltaTime y transform.Translate. Con este enfoque, tendrás un movimiento fluido en horizontal y vertical, listo para iterar en tu roguelike.
¿Cómo preparar el Input Manager para el movimiento en Unity?
Unity ofrece por defecto 18 ejes de entrada para mapear hardware a código. Aquí se usan los ejes Horizontal y Vertical: flechas izquierda/derecha o A/D para horizontal, y flechas arriba/abajo o W/S para vertical. Es clave recordar sus nombres exactos: Horizontal (H mayúscula) y Vertical (V mayúscula).
Usa los ejes predefinidos del Input Manager.
Confirma las teclas: flechas y alternativas WASD.
Verifica mayúsculas en los nombres de ejes.
¿Qué necesita el Player Controller en C# para empezar?
Se crea un script C# llamado PlayerController (sin espacios) y se arrastra al objeto del jugador. Se edita en Visual Studio. La variable public float speed controla la velocidad; al ser pública, puedes ajustarla desde el editor. Un valor inicial recomendado: 4.0f. También se definen constantes para evitar errores de escritura en los nombres de ejes.
El script controla el personaje con flechas o WASD.
La velocidad puede variar: incluso con un power up podría duplicarse.
Constantes: evitan confundir mayúsculas y minúsculas.
Ejemplo de declaración de variables y constantes:
publicclassPlayerController:MonoBehaviour{publicfloat speed =4.0f;// velocidad por defecto.privateconststring horizontal ="Horizontal";privateconststring vertical ="Vertical";voidUpdate(){// Movimiento se implementa aquí.}}
¿Cómo programar el movimiento con Update y Time.deltaTime?
El movimiento usa la ecuación de física espacio = velocidad × tiempo: el desplazamiento depende de speed y de Time.deltaTime (tiempo desde el último frame). Se lee la entrada con Input.GetAxisRaw y se aplica un umbral para evitar ruido del hardware.
¿Por qué usar un umbral con Mathf.Abs > 0.5?
Los dispositivos no son perfectos: pueden generar pequeñas vibraciones. En lugar de comprobar > 0, se usa Mathf.Abs(valor) > 0.5f para iniciar el movimiento solo cuando hay una presión clara de la tecla.
Evita desplazamientos indeseados por ruido.
Acepta entradas parciales sin exigir valor 1.0.
¿Cómo mover en horizontal y vertical con transform.Translate?
Se comprueba cada eje por separado. Si supera el umbral, se traslada el transform en el eje correspondiente. Horizontal mueve en X; vertical mueve en Y; Z se mantiene en 0. Si pulsas dos teclas a la vez, se mueve en diagonal.
voidUpdate(){// Horizontal.float h = Input.GetAxisRaw(horizontal);if(Mathf.Abs(h)>0.5f){ transform.Translate(newVector3(h * speed * Time.deltaTime,0f,0f));}// Vertical.float v = Input.GetAxisRaw(vertical);if(Mathf.Abs(v)>0.5f){ transform.Translate(newVector3(0f, v * speed * Time.deltaTime,0f));}}
Uso de Input.GetAxisRaw: lee la cantidad de pulsación.
Uso de Time.deltaTime: mantiene movimiento suave por frame.
Uso de transform.Translate: aplica el vector de desplazamiento.
Además, verás en el editor la variable speed en el componente del jugador y podrás ajustar la sensación de control. El movimiento inicial es simple: permite salir de pantalla y aún no hay animación, pero sienta una base sólida para pulir el control.
¿Te gustaría mejorar este controlador con desaceleración, límites de pantalla o animaciones? Comenta qué te gustaría implementar a continuación.