Velocità
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 5 di 71.
rb.linearVelocity indica come si sta muovendo il corpo in questo momento: è un Vector3 espresso in metri al secondo lungo gli assi x, y e z. Leggerlo ti dice in che direzione si sta muovendo il corpo, mentre rb.linearVelocity.magnitude ne indica la velocità. Impostarlo cambia subito il movimento, senza accelerazione graduale e senza che la massa abbia alcun effetto: una scatola da 1 kg e una cassaforte da 50 kg, entrambe impostate a 2 m/s, si muovono esattamente a 2 m/s dal passo fisico successivo. In seguito, la gravità, l’attrito e gli urti continuano ad agire su di essi.
Questo go-kart avanza a esattamente cruise m/s. Copia la velocità, modifica solo z e la riassegna, così il valore y generato dalla gravità rimane e il kart continua a cadere quando raggiunge la fine di una rampa:
void FixedUpdate()
{
Vector3 vel = rb.linearVelocity;
vel.z = cruise; // in avanti a esattamente cruise m/s
rb.linearVelocity = vel; // y mantiene il valore determinato dalla gravità
}Impostare anche y a 0 eliminerebbe a ogni passo la velocità generata dalla gravità e il kart scivolerebbe giù dalla rampa invece di cadere. Prima di Unity 6, questa proprietà si chiamava velocity. I vecchi tutorial usano ancora rb.velocity: in Unity 6 il codice viene compilato, ma con un avviso che indica che velocity è obsoleta e ha cambiato nome in linearVelocity. Allo stesso modo, drag è diventata linearDamping. Usa i nuovi nomi.
Sfida
FacileFai camminare il robot esattamente a speed m/s e lascia che cada dal bordo.
- In
FixedUpdate(), leggifloat h = Input.GetAxisRaw("Horizontal");efloat vda"Vertical". - Imposta
rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, v * speed);, mantenendo la gravità sull’asse y.
Premi «Gioca» e cammina oltre il bordo: il robot si ferma quando lasci i comandi e cade. Poi premi «Verifica».
Provalo tu
using UnityEngine;
public class RobotWalk : MonoBehaviour
{
public float speed = 3f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// Muoviti esattamente alla velocità speed con i tasti freccia, mantenendo la componente y della gravità
}
}
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