Menu
CoddyTech

Saltar con un impulso

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 3 de 63.

AddForce recibe un segundo argumento, un ForceMode, que indica cómo usar el vector. Si no lo especificas, se usa ForceMode.Force, un empuje que dura un paso de física, así que hay que añadirlo paso tras paso. Una patada, un salto o una explosión ocurren de una sola vez, y eso es ForceMode.Impulse: todo el empuje de una sola vez, lo que cambia la velocidad en una cantidad igual al impulso dividido por la masa.

Este balón de fútbol (0.5 kg) recibe una patada al hacer clic. Su velocidad aumenta en (0, 2, 6) / 0.5 = (0, 4, 12) m/s en el siguiente paso de física, y a partir de ahí la gravedad y el césped se encargan:

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        rb.AddForce(new Vector3(0, 2, 6), ForceMode.Impulse);
    }
}

Un empuje puntual se puede llamar desde Update(), en el fotograma del clic: Unity lo conserva y lo aplica en el siguiente paso de física. Los cuatro modos se diferencian en dos aspectos: si se aplica todo de una vez o a lo largo de un paso, y si se tiene en cuenta la masa:

  • Force: a lo largo de un paso, dividido por la masa (motores, viento).
  • Acceleration: a lo largo de un paso, sin tener en cuenta la masa.
  • Impulse: todo de una vez, dividido por la masa (patadas, saltos).
  • VelocityChange: todo de una vez, sin tener en cuenta la masa: el vector se suma directamente a la velocidad.
challenge icon

Desafío

Fácil

Haz que la rana salte. Cada vez que pulses la barra espaciadora, recibirá un impulso hacia arriba de jumpImpulse (10 en el Inspector). La rana pesa 2 kg y el salto debe tener en cuenta su masa: cuanto más pesada sea la rana, menos alto saltará.

Mantener pulsada la barra espaciadora sigue contando como un solo salto. Pulsa Play y hazla saltar; después, pulsa Check.

Pruébalo tú mismo

using UnityEngine;

public class FrogJump : MonoBehaviour
{
    public float jumpImpulse = 10f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        // Space: un impulso hacia arriba de jumpImpulse
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Física y jugabilidad