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.
Sfida
FacileSpingi il disco sul campo senza attrito usando le forze.
- In
FixedUpdate(), leggifloat h = Input.GetAxis("Horizontal");efloat v = Input.GetAxis("Vertical");. - Chiama
rb.AddForce(new Vector3(h, 0, v) * push);, senzaTime.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
1Corpo rigido
Gravità e massaSpingi con AddForceSalta con un impulsoFixedUpdate per la fisicaVelocitàCorpi cinematiciRiepilogo: piattaforma di lancio4Coroutine
InvokeInvokeRepeating, CancelInvokeLa tua prima coroutineCicli nelle coroutineInterrompere le coroutineRiepilogo: conto alla rovescia7Rotazione
Angoli di EuleroQuaternioniGuarda nella direzione in cui ti muoviRuota in modo fluidoRiepilogo: Torretta10Progetto: Fuga dall'arena
L'arenaCacciatori2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliereEsercitati da solo: Playground Unity