Menu
CoddyTech

Salta con un impulso

Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 3 di 63.

AddForce accetta un secondo argomento, un ForceMode, che indica come usare il vettore. Se non lo specifichi, ottieni ForceMode.Force, una spinta che dura un passo di fisica, quindi deve essere aggiunta passo dopo passo. Un calcio, un salto o un’esplosione avvengono tutti in una volta: questo è ForceMode.Impulse, cioè tutta la spinta in un colpo solo, che cambia la velocità di una quantità pari all’impulso diviso per la massa.

Questo pallone da calcio (0.5 kg) viene calciato con un clic. La sua velocità aumenta di (0, 2, 6) / 0.5 = (0, 4, 12) m/s al passo di fisica successivo, poi subentrano la gravità e l’erba:

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

Una spinta singola può essere chiamata da Update(), nel frame del clic: Unity la conserva e la applica al passo di fisica successivo. Le quattro modalità differiscono in due aspetti: se la spinta avviene tutta in una volta o nell’arco di un passo, e se tiene conto o meno della massa:

  • Force: nell’arco di un passo, divisa per la massa (motori, vento).
  • Acceleration: nell’arco di un passo, la massa viene ignorata.
  • Impulse: tutta in una volta, divisa per la massa (calci, salti).
  • VelocityChange: tutta in una volta, la massa viene ignorata: il vettore viene aggiunto direttamente alla velocità.
challenge icon

Sfida

Facile

Fai saltare la rana. Ogni pressione della barra spaziatrice le dà una spinta verso l’alto di jumpImpulse (10 nell’Inspector). La rana pesa 2 kg e il salto deve tenere conto della sua massa: una rana più pesante salta meno in alto.

Tenere premuta la barra spaziatrice conta comunque come un solo salto. Premi Play e fai saltare la rana, poi Check.

Provalo tu

using UnityEngine;

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

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

    void Update()
    {
        // Space: una spinta verso l'alto pari a jumpImpulse
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fisica e gameplay