Menu
CoddyTech

Spingi con AddForce

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

Una volta che un oggetto ha un Rigidbody, la fisica lo muove, quindi smetti di modificarne la posizione e invece lo spingi. rb.AddForce(force) spinge il corpo con una forza, un Vector3 misurato in newton. Una forza non imposta una velocità: accelera il corpo finché continui ad applicarla, a una velocità pari alla forza divisa per la massa ogni secondo. Smetti di spingere e il corpo mantiene la velocità che ha.

Questo hovercraft (2 kg) ha un propulsore: mentre tieni premuta la freccia su, una forza di thrust lo spinge in avanti, lungo +z. Con una spinta di 12, guadagna 12 / 2 = 6 m/s ogni secondo:

public float thrust = 12f;
private Rigidbody rb;

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

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.UpArrow))
    {
        rb.AddForce(Vector3.forward * thrust);
    }
}

Le forze vanno applicate in FixedUpdate(), che Unity chiama prima di ogni passaggio fisico, 50 volte al secondo (la lezione 4 spiega perché). In questa riga non c'è Time.deltaTime: AddForce distribuisce già la forza nel corso del passaggio e moltiplicarla per Time.deltaTime renderebbe la spinta 50 volte più debole. A terra, l'attrito spinge in senso contrario, quindi una forza modesta potrebbe non riuscire a muovere affatto una scatola pesante.

challenge icon

Sfida

Facile

Spingi il disco sul campo senza attrito usando le forze.

  1. In FixedUpdate(), leggi float h = Input.GetAxis("Horizontal"); e float v = Input.GetAxis("Vertical");.
  2. Chiama rb.AddForce(new Vector3(h, 0, v) * push);, senza Time.deltaTime.

Premi «Gioca», spingi e lascia andare: il disco continua a scivolare. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class PuckPusher : MonoBehaviour
{
    public float push = 4f;
    private Rigidbody rb;

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

    void FixedUpdate()
    {
        // Spingi il disco: Horizontal lungo x, Vertical lungo z
    }
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity