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 71.

AddForce acepta 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 suceden de una sola vez, y eso es ForceMode.Impulse: todo el empuje de golpe, 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 actúan de una sola vez o durante un paso, y si tienen en cuenta la masa o no:

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

Desafío

Fácil

Haz que la rana salte una vez por cada pulsación de la barra espaciadora.

  1. Debajo del comentario, escribe if (Input.GetKeyDown(KeyCode.Space)).
  2. Dentro de él, llama a rb.AddForce(Vector3.up * jumpImpulse, ForceMode.Impulse);, para que la rana cuente con 2 kg.

Pulsa «Jugar» y pulsa la barra espaciadora: la rana da un salto hacia arriba y vuelve a caer. Después, pulsa «Comprobar».

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
    }
}

Todas las lecciones de Física y jugabilidad

Practica por tu cuenta: Playground de Unity