Optimiza la entrada de tu juego en Unity con el mapeo por acciones. Al pasar de teclas específicas a acciones como Jump y Submit, el control se vuelve flexible y escalable: funcionará con teclado, ratón o mando sin cambiar código. Además, podrás ajustar sensibilidad y zona muerta para evitar entradas indeseadas en mandos usados.
¿Cómo unificar la entrada con el input manager de Unity?
El panel de Input en Project Settings ofrece un conjunto de ejes y botones ya configurados por Unity. Allí encontrarás axes como Horizontal y Vertical, acciones como Jump, Fire, y lecturas de ratón como Mouse X, Mouse Y o el scroll. Unity actúa como un manager: recibe señales del hardware y te devuelve una acción con nombre para tu código.
- Jump viene asignado a la barra espaciadora. Útil para saltar de inmediato.
- Fire suele estar en mouse 0. Puede reutilizarse si no hay disparo.
- Submit equivale a Enter. Ideal para iniciar partida.
- Horizontal/Vertical soportan flechas y teclas A/D como alternativas.
¿Qué configuraciones clave debes revisar?
- Positive button: define la tecla principal de la acción.
- Sensibilidad: suaviza o acelera la respuesta, útil en mandos desgastados.
- Zona muerta: evita entradas por pequeñas vibraciones en sticks.
- Botón positivo y negativo: dirección a favor o en contra del movimiento.
- Alternativos (alt positive/negative): A/D además de flechas, por ejemplo.
- Cuidado con reutilizar mouse 0 en varias acciones. Podría crear conflictos si luego implementas disparo.
¿Qué acciones útiles vienen preconfiguradas?
- Horizontal y Vertical: flechas y A/D como alternativas.
- Jump: generalmente en Space.
- Fire: configurado con mouse 0.
- Mouse X/Y y scroll: lectura de ratón.
- Submit: asociado a Enter.
¿Cómo migrar el código a acciones?
La clave es sustituir lecturas directas de teclas por Input.GetButtonDown("NombreAcción"). Así te abstraes del hardware y cambias la configuración sin tocar scripts.
¿Cómo reescribir el salto con acciones?
Usa la acción Jump en lugar de la barra espaciadora. Si necesitas también ratón, añade mouse 0 como alternativa en el Input Manager o reutiliza Fire si no disparas.
// Antes: if (Input.GetKeyDown(KeyCode.Space)) { Saltar(); }
// Después, con acción configurada en el Input Manager
if (Input.GetButtonDown("Jump"))
{
Saltar();
}
¿Cómo iniciar la partida con submit?
Cambia la tecla fija (por ejemplo, "S") por la acción Submit para arrancar el juego con Enter.
// Antes: if (Input.GetKeyDown(KeyCode.S)) { EmpezarPartida(); }
// Después: acción de entrada configurable
if (Input.GetButtonDown("Submit"))
{
EmpezarPartida();
}
¿Qué ventajas obtienes con esta abstracción?
- Te desacoplas del hardware.
- Reconfiguras controles sin recompilar.
- Preparas el juego para teclado, ratón o mando.
¿Cómo controlar el movimiento por estado y corregir bugs?
El personaje solo debe moverse cuando el GameManager esté en estado InGame. Si estás en Menú o Muerte, pausa el movimiento. Las indentaciones y comentarios ayudan a leer el código y entender la lógica al volver más tarde.
void FixedUpdate()
{
if (GameManager.Instance.CurrentGameState == GameState.InGame)
{
// Movimiento normal del personaje.
AumentarVelocidadSiCorresponde();
MoverPersonaje();
}
else
{
// Pausar solo el eje X, conservando caída natural en Y.
var rb = GetComponent<Rigidbody2D>();
rb.velocity = new Vector2(0f, rb.velocity.y);
// Comentario: si no estamos dentro de la partida, detenemos el avance.
}
}
¿Cómo pausar sin frenar la caída?
Evita usar Vector2.zero al pausar, porque anula también la velocidad en Y y simula una caída a cámara lenta. La solución es crear un nuevo vector con X = 0 y Y = rb.velocity.y para mantener la gravedad.
¿Qué mejora queda pendiente como ejercicio?
Aun con el juego en pausa, el salto puede seguir activo. Envuélvelo en un if igual al del movimiento para que solo salte en InGame usando Input.GetButtonDown("Jump").
¿Con qué combinación de acciones vas a mapear primero? Comparte tu configuración y cómo resolviste el salto en pausa.