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:
public class PlayerController : MonoBehaviour
{
public float speed = 4.0f; // velocidad por defecto.
private const string horizontal = "Horizontal";
private const string vertical = "Vertical";
void Update()
{
// 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.
void Update()
{
// Horizontal.
float h = Input.GetAxisRaw(horizontal);
if (Mathf.Abs(h) > 0.5f)
{
transform.Translate(new Vector3(h * speed * Time.deltaTime, 0f, 0f));
}
// Vertical.
float v = Input.GetAxisRaw(vertical);
if (Mathf.Abs(v) > 0.5f)
{
transform.Translate(new Vector3(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.