Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Fai camminare il robot esattamente a speed m/s e lascia che cada dal bordo.

  1. In FixedUpdate(), leggi float h = Input.GetAxisRaw("Horizontal"); e float v da "Vertical".
  2. 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

Esercitati da solo: Playground Unity