Domina el salto en Unity 2D con C# desde el primer script: diferencias entre Awake y Start, detección de input en Update y aplicación de AddForce al Rigidbody2D con impulso. Con buenas prácticas como delegar en métodos y configurar dependencias al iniciar, evitarás errores típicos como el salto repetido al mantener pulsada la tecla.
¿Qué diferencia a awake de start en Unity?
Al dar Play, ambos se ejecutan, pero en orden distinto. Awake ocurre en el frame 0, antes de renderizar nada, y Start en el frame 1, cuando todo está preparado. Para configurar dependencias privadas, usar Awake es más coherente con el “despertar” del objeto: al iniciar, ya sabe quién es su Rigidbody2D o su Collider.
¿Cómo referenciar rigidbody2d con getcomponent?
- Usa una variable privada para guardar la referencia.
- Llama a GetComponent() en Awake.
- Finaliza cada línea con punto y coma. No lo olvides.
using UnityEngine;
public class Player : MonoBehaviour
{
private Rigidbody2D rigidBody;
private float jumpForce = 6f; // fuerza de salto
void Awake()
{
rigidBody = GetComponent<Rigidbody2D>();
}
}
¿Por qué usar awake para configurar dependencias?
- Se ejecuta antes que Start.
- Evita un frame de desfase en referencias.
- Mantiene el objeto listo desde el inicio.
¿Cómo detectar input en update sin errores?
Update se ejecuta hasta 60 veces por segundo si el juego corre a 60 fps. Ahí puedes consultar entradas: teclado con Input.GetKey y ratón con Input.GetMouseButtonDown. Para atender ambas, combina condiciones con el operador lógico OR.
void Update()
{
if (Input.GetKey(KeyCode.Space) || Input.GetMouseButtonDown(0))
{
Jump();
}
}
¿Qué teclas y botones admite keycode y mousebutton?
- Teclas alfanuméricas: KeyCode.A, KeyCode.B, etc.
- Modificadores y especiales: Alt, F1–F12, Tab, Home, AltGr.
- Ratón: botón 0 (izquierdo), 1 (derecho), 2 (rueda si es clicable).
- Variantes del ratón: GetMouseButton, GetMouseButtonUp, GetMouseButtonDown.
- Para “o”: usa dos barras verticales ||. En teclado español: Alt + 1 dos veces.
¿Por qué aparece el bug al mantener la tecla?
- Con Input.GetKey(KeyCode.Space) en Update, la condición es verdadera tantos frames como mantengas pulsado.
- Resultado: se aplica fuerza repetidamente y el personaje sube sin parar.
- Es un bug típico al programar entradas cuadro a cuadro.
¿Cómo programar el salto con rigidbody2d y addforce?
La física ya está resuelta por el motor. Solo necesitas aplicar una fuerza hacia arriba al Rigidbody2D. Usa la dirección Vector2.up y la magnitud definida por tu fuerza de salto. Para un salto, el modo correcto es un impulso en un instante.
void Jump()
{
rigidBody.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
}
¿Qué dirección y magnitud definen el salto?
- Dirección: Vector2.up (arriba en 2D).
- Magnitud: variable de fuerza de salto (jumpForce).
- Efecto: sube por impulso, baja por gravedad.
¿Fuerza continua o impulso?
- Fuerza: empuje constante en el tiempo.
- Impulso: toda la fuerza en un instante, ideal para saltar.
- Para saltos: elige impulso por fidelidad física.
¿Tú cómo prefieres combinar teclado y ratón para saltar y por qué? Comparte tu enfoque y dudas en los comentarios.