Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Physic Material e vincoli per oggetti "fisici"

Attribuire agli oggetti effetti realistici di attrito e di rimbalzo, tramite le proprietà Physic Material del RigidBody

Quando un corpo si muove molto veloce, è possibile che trapassi altri corpi perché la simulazione fisica non è abbastanza 'granulare' da calcolare il momento dell'impatto. In un esempio pratico di un colpo di pistola, in un frame il proiettile si trova davanti al muro, e nel frame successivo l'ha già passato: in quel caso, per il motore di fisica non c'è stato impatto (ed è vero!) quindi il proiettile appare al giocatore come se avesse bucato il muro.

Attribuire agli oggetti effetti realistici di attrito e di rimbalzo, tramite le proprietà Physic Material del RigidBody

Quando un corpo si muove molto veloce, è possibile che trapassi altri corpi perché la simulazione fisica non è abbastanza 'granulare' da calcolare il momento dell'impatto. In un esempio pratico di un colpo di pistola, in un frame il proiettile si trova davanti al muro, e nel frame successivo l'ha già passato: in quel caso, per il motore di fisica non c'è stato impatto (ed è vero!) quindi il proiettile appare al giocatore come se avesse bucato il muro.

Link copiato negli appunti

In questa lezione continuiamo ad esaminare le proprietà dei Rigidbody, in particolare esaminiamo i Physic Material, che permettono di attribuire ad un oggetto effetti realistici di attrito e di rimbalzo.

Oggetti veloci

Quando un corpo si muove molto veloce, è possibile che trapassi altri corpi perché la simulazione fisica non è abbastanza 'granulare' da calcolare il momento dell'impatto. In un esempio pratico di un colpo di pistola, in un frame il proiettile si trova davanti al muro, e nel frame successivo l'ha già passato: in quel caso, per il motore di fisica non c'è stato impatto (ed è vero!) quindi il proiettile appare al giocatore come se avesse bucato il muro.

Per evitare questo effetto, i Rigidbody hanno un'opzione chiamata Collision Detection che di default è Discrete. Questa impostazione va bene nel 90% dei casi, ma se si hanno problemi con corpi che trapassano muri o cose simili, si può scegliere per un corpo un valore Continuous dal menu a tendina Collision Detection.

Nello specifico, il valore scelto deve essere Continuous Dynamic se il corpo con cui questo deve collidere si muove (ovvero possiede anche lui un Rigidbody che non è isKinematic).

Nota: La Collision Detection di tipo 'Continuous' o Continuous Dynamic è molto pesante a livello computazionale, e va utilizzata solo se davvero necessario.

Limitare i movimenti di un Rigidbody

Fra le proprietà dei Rigidbody abbiamo anche la possibilità di limitare il movimento (i cosiddetti Constraints). Nell'Inspector sono presenti 6 caselline che permettono di bloccare movimento e rotazione del rigidbody nei tre assi distinti.

In questo modo possiamo creare effetti particolari molto utili: ad esempio, in un gioco in cui non c'è spostamento verticale o salto, limitare l'asse Y può fare in modo che anche se il personaggio viene colpito con forza non voli via dallo scenario in alcun caso. In giochi 2D, o 3D ma con gameplay in 2D, il personaggio inquadrato di lato può avere l'asse Z bloccato (anche se in questo caso sarebbe meglio usare i nuovi strumenti per la fisica 2D che Unity mette a disposizione dalla versione 4.2 circa).

Un'altra opzione da esaminare è isKinematic, spuntarla consente di creare un Rigidbody che, pur "esistendo" nel mondo fisico, non viene influenzato dai joints, dalle forze o dalle collisioni. Questo permette di creare un corpo interamente controllato dall'animazione, ad esempio. All'occorrenza, si può sempre rimettere isKinematic su false in programmazione, e il corpo ricomincierà ad essere influenzato dalle forze.

È importante ricordare che due Collider che urtano fra loro non ricevono gli eventi OnCollisionEnter, OnCollisionExit, OnCollisionStay se almeno uno dei due non ha un Rigidbody. In quel caso, isKinematic permette di avere un Rigidbody anche quando non serve che il corpo si sposti.

I Physic Material

I collider, di qualunque tipo siano, possiedono un'ulteriore proprietà interessante: il Physic Material. Questo tipo di materiale, specifico per la fisica, definisce il modo in cui il collider reagisce al contatto con un altro collider, ammesso che abbia un Rigidbody che gli permetta di muoversi nello spazio.

I Physic Material, come i normali Material, sono dei veri e propri file che si trovano nel progetto ed hanno come estensione .physicmaterial. Per crearne uno, basta andare su Assets > Create > Physics Material, oppure cliccare col tasto destro nel pannello Project e selezionare la stessa opzione.

Quando un Physics Material è selezionato, l'inspector si presenta così:

Come si può notare, questo asset permette di gestire una serie di parametri che ne determinano le proprietà meccaniche come:

  • Attrito statico (Static Friction), ovvero la resistenza dell'oggetto a mettersi in moto;
  • Attrito dinamico (Dynamic Friction), ovvero la resistenza che ha quando ormai è in movimento, e che lo fa fermare di nuovo.
  • Elasticità (Bounciness), definisce il fattore di rimbalzo: un corpo che abbia 0 assorbe completamente i colpi, mentre uno che abbia bounciness 1 li restituisce con potenza uguale. Ad esempio, una palla con bounciness 1, se lasciata cadere non smetterà mai di rimbalzare perché la forza con cui rimbalza non decresce mai.

I valori di combine indicano, in caso di impatto con un altro Physic Material, come vengono calcolate la frizione e il rimbalzo: il risultato può essere una media dei due (Average), il più piccolo dei due, il più alto, o il prodotto dei due valori.

La proprietà FrictionDirection2 è un'opzione interessante ma difficilmente utile: se diverso da 0, aggiunge una secondo attrito diverso dal primo che si attiva solo quando il corpo si muove nella direzione indicata dal vettore. Permette quindi di creare effetti particolari come un corpo che scivola quando va in avanti, ma che applica una forte resistenza quando si muove sui lati.

Per usare un Physic Material, l'unica cosa necessaria è di crearlo nel Project e assegnarlo ad un Collider. È possibile trovare Physic Material già pronti in un package di Unity (ovvero una collezione di asset predefiniti), che si trova in Assets > Import Package > Physics Materials.

Ti consigliamo anche