Questo è un tutorial di base sull'utilizzo dei Rigid Body e dei Physics Materials per far cadere e far rimbalzare degli oggetti nei nostri progetti Unity.



Trascrizione del video

Salve a tutti!

Questo è un tutorial di base sull'utilizzo dei Rigid Body e dei Physics Materials per far cadere e far rimbalzare degli oggetti nei nostri progetti Unity.

Unity fornisce infatti un motore di simulazione fisica, ma per poter accedere a queste funzionalità è necessario utilizzare un paio di Components (come Rigid Body e i Colliders) ed altri elementi; ciò è dovuto al fatto che la simulazione fisica è onerosa, da un punto di vista computazionale, per cui di default gli oggetti NON vi partecipano: tocca a noi specificare se e come un oggetto deve comportarsi, appunto, in maniera fisica.

Il tutorial è stato registrato con la versione 2022, partendo da un nuovo progetto 3D, inizialmente vuoto.

Nel tutorial faccio uso del modello 3D di un pallone da basket. Come spesso accade nei miei video, non è necessario scaricarlo: potete seguire il tutorial ed imparare anche senza quel particolare modello!

Ok, iniziamo!

Sto allestendo una semplice scena in Unity con un Cube che farà da pavimento e il pallone da basket di cui vi ho appena parlato.

Notiamo subito che l'oggetto Cube, che è un oggetto nativo di Unity, possiede già un componente Box Collider, mentre il modello del pallone, creato a partire da un file esterno, NON possiede un componente Collider, di alcun tipo; su questo punto torneremo in seguito.

Ho posizionato il pallone da basket proprio sopra il Cube, ad una certa distanza, ma alla pressione del tasto Play noto subito che il pallone... non cade.

Per far partecipare il pallone alla simulazione fisica della scena non dobbiamo far altro che fornirgli un componente Rigid Body, cosa che può essere fatta facilmente nell'Inspector dell'oggetto.

Nella scheda del componente notiamo alcune caratteristiche interessanti; tra tutte, la massa (che possiamo lasciare così com'è, per questo esempio) e la casella "Use Gravity", la quale è selezionata di default, per cui questa volta possiamo avviare il gioco e notare che, in effetti, il pallone cade...

… ma passa attraverso il cubo sottostante, precipitando nel vuoto!

Potreste pensare di dover aggiungere un componente Rigid Body, eventualmente senza gravità, anche al Cubo sottostante, per far partecipare entrambi alla simulazione fisica, ma possiamo verificare subito (come sto facendo a video) che questa ipotesi non risolve il problema (per cui sto anche rimuovendo il Rigid Body dal cubo, per non fare confusione); semplicemente, il pallone passa attraverso al cubo... eppure, il cubo ha un Box Collider, per cui dovrebbe rilevare la collisione...

Il fatto è che è il pallone da basket a NON avere un suo Collider, per cui dobbiamo fornirgliene uno nell'Inspector; dal momento che il pallone da basket ha una forma sferica, scegliamo proprio uno Sphere Collider per questo oggetto.

Avviando adesso la simulazione, vedremo il pallone cadere sul cubo e rimanere fermo su di esso.

Attenzione, comunque: anche il Cubo (e, in generale, qualsiasi oggetto di scena che dovrà interagire con il pallone) deve essere provvisto del suo Collider!

Quindi, ricapitolando: per poter interagire tra loro, due oggetti della scena devono essere entrambi provvisti di Colliders, altrimenti si comporteranno come dei fantasmi, passandosi attraverso; inoltre, per poter partecipare alla simulazione fisica (e quindi subire la gravità e altre forze), un oggetto deve essere provvisto anche di un componente di tipo Rigid Body.

Il risultato ottenuto fino a questo punto, però, non è soddisfacente: il pallone cade e impatta con il cubo sottostante, ma non rimbalza!

Le proprietà del materiale di cui è fatto l'oggetto non vanno però assegnate al Rigid Body, ma al Collider: queste proprietà riguardano infatti QUALSIASI oggetto di scena, non solo quelli che partecipano alla simulazione fisica (ossia i Rigid Bodies), per cui è nella scheda del Collider che dobbiamo impostarle.

In questa scheda troviamo proprio un campo, Material, che di default è impostato a None ma che ci suggerisce che dobbiamo fornirgli un oggetto di tipo "Physic Material".

Aggiungiamo quindi un oggetto di questo tipo nel Project; attenzione: "Physic Material", non semplicemente "Material", che riguarda invece l'aspetto visivo di un oggetto.

Assegniamo quindi questo nuovo Physic Material allo Sphere Collider del pallone da basket, premiamo Play e... notiamo che il pallone non rimbalza.

Ciò è dovuto al fatto che, di default, la bounciness di un nuovo Physic Material è impostata a 0, come possiamo constatare semplicemente selezionando tale oggetto ed osservandone le poche proprietà nell'Inspector.

Il Physic Material ha due proprietà principali: "Bounciness" (rimbalzo) e "Friction" (attrito), che possono essere regolate per creare un comportamento di rimbalzo più o meno realistico; ad esempio, aumentando la "Bounciness" si può aumentare l'intensità del rimbalzo, mentre aumentando l'attrito si può diminuire la distanza percorsa dopo ogni rimbalzo.

Proviamo quindi ad impostare Bounciness a 1 (valore massimo, per questo campo) e ad avviare il gioco: questa volta, il pallone rimbalza un paio di volte, prima di fermarsi!

Il comportamento è realistico, ma come fare per far rimbalzare di più il pallone?

Possiamo agire, ad esempio, sui parametri Friction e, soprattutto, sui due parametri Combine: questi parametri determinano come combinare i parametri fisici di due oggetti quando entrano in contatto.

Il valore di default per Bounce Combine è Average, la media, per cui farà appunto una media tra il pallone (per il quale abbiamo impostato Bounciness 1) e il cubo sottostante, che NON ha Physics Material e che quindi verrà visto da Unity come 0, per cui il valore di Bounce finale sarà, in realtà, 0.5.

Se cambiamo Bounce Combine in Maximum, questa volta la Bounciness reale in gioco sarà 1 e il pallone rimbalzerà molto di più...

… il problema è che rimbalzerà SEMPRE di più! Si tratta di un comportamento strano, in effetti; a quanto pare, per mantenere dei rimbalzi costanti, il valore di Bounciness deve essere 0.965... non chiedetemi perché.

Ovviamente, nel simulare i rimbalzi, anche la superficie è importante: dobbiamo quindi fornire un Physic Material anche al Cubo (ma il discorso vale per per pavimenti, pareti e altri oggetti, fatti di materiali diversi e, quindi, con proprietà fisiche diverse) ed impostarne la Bounciness in maniera adeguata... ma questo lo lascio a voi: provate le varie combinazioni, con valori diversi per Bounciness, Friction e Combine!

Per questo tutorial è tutto! A presto!

Cerca nei Tutorial

Cerca inserendo una frase o più parole chiave, separate da virgole.

Modelli 3D, tutorial e risorse di computer grafica di Francesco Milanese. Le licenze d’uso dei modelli 3D sono acquistabili tramite gli store esterni indicati nelle rispettive pagine, secondo le condizioni di licenza applicabili. Francesco Milanese — Partita IVA: 06321250877. Contatti: info@francescomilanese.com


INFORMATIVA ESTESA SULL'UTILIZZO DEI COOKIES