Menu
CoddyTech

Gravità e massa

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

Un componente Rigidbody affida il suo oggetto alla fisica di Unity, proprio come quando ne hai aggiunto uno in Add a Component. Da quel momento, la gravità accelera l’oggetto di 9.81 m/s ogni secondo e il Rigidbody ha le impostazioni che determinano come. Due di queste sono mass, in chilogrammi (1 per un nuovo Rigidbody), e useGravity (attivo per un nuovo Rigidbody).

La massa non cambia la velocità con cui cadono gli oggetti. La gravità tira più forte un corpo pesante, ma è altrettanto più difficile accelerarlo, quindi una cassa da 1 kg e un’incudine da 50 kg lasciate cadere dalla stessa altezza atterrano nello stesso fotogramma. La massa conta quando i corpi si spingono a vicenda: l’incudine sposta la cassa, mentre la cassa muove a malapena l’incudine. Questo palloncino da festa ha una massa ridotta e la gravità non agisce su di lui, quindi resta sospeso nel punto in cui la scena lo ha posizionato:

void Start()
{
    Rigidbody rb = GetComponent<Rigidbody>();
    rb.mass = 0.2f;
    rb.useGravity = false;
}

Con useGravity disattivato, il palloncino mantiene comunque la sua massa e si muove comunque quando qualcosa lo urta: è solo la gravità a smettere di tirarlo. Impostalo di nuovo su true e la gravità tornerà ad agire da qualsiasi punto si trovi l’oggetto. Nella fisica di Unity non c’è nemmeno aria, quindi una piuma cade come un mattone, a meno che tu non assegni al suo Rigidbody un po’ di smorzamento lineare.

challenge icon

Sfida

Facile

Appendi le due casse, poi falle cadere insieme premendo Space.

  1. In Start(), sotto la riga GetComponent, imposta rb.mass = weight; e rb.useGravity = false;.
  2. In Update(), alla pressione di Input.GetKeyDown(KeyCode.Space), imposta rb.useGravity = true;.

Premi «Gioca» e premi Space: la pesante Safe e il leggero Box atterrano insieme. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class CraneLoad : MonoBehaviour
{
    public float weight = 1f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        // Imposta la massa su weight e impedisci alla gravità di attirare l'oggetto
    }

    void Update()
    {
        // Space: lascia che la gravità attiri di nuovo l'oggetto
    }
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity