Menu
CoddyTech

Salta con un impulso

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

AddForce accetta un secondo argomento, un ForceMode, che specifica come usare il vettore. Senza questo argomento, 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, ed è questo che fa ForceMode.Impulse: l'intera spinta in un colpo solo, che modifica la velocità di una quantità pari all'impulso diviso per la massa.

Questo pallone da calcio (0.5 kg) viene calciato al clic. La sua velocità aumenta di (0, 2, 6) / 0.5 = (0, 4, 12) m/s al passo di fisica successivo, poi entrano in gioco 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 richiamata da Update(), nel fotogramma 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 della massa o meno:

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

Sfida

Facile

Fai saltare la rana una volta per ogni pressione della barra spaziatrice.

  1. Sotto il commento, scrivi if (Input.GetKeyDown(KeyCode.Space)).
  2. Al suo interno, chiama rb.AddForce(Vector3.up * jumpImpulse, ForceMode.Impulse);, così la rana pesa 2 kg.

Premi «Gioca» e premi la barra spaziatrice: la rana salta verso l’alto e ricade. Poi premi «Verifica».

Provalo tu

using UnityEngine;

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

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

    void Update()
    {
        // Space: un singolo impulso verso l'alto pari a jumpImpulse
    }
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity