In questa lezione vedremo insieme i principi della fisica in Unity 3D imparando ad utilizzarne i componenti fondamentali.
I componenti che vedremo a breve infatti serviranno a far interagire gli oggetti fra loro e con l’ambiente circostante.
Ma non solo!
Saranno fondamentali anche per scrivere il codice del nostro gioco e darci la possibilità di interagire con gli oggetti della nostra scena.
Del resto senza interazione non avremmo un videogioco da giocare, no?
Molti di questi componenti esistono in due varianti: una in 3D ed una in 2D.
Non esamineremo entrambe le varianti di ogni componente perché il loro funzionamento è identico e le differenze si limitano al fatto che le varianti 2D sono prive di ogni riferimento riguardante l’asse delle Z, e quindi devono essere utilizzate solo in giochi bidimensionali.
Fai un bel respiro, perché stiamo per analizzare due dei componenti più utilizzati all’interno di Unity 3D.
Il Rigid Body ed i Collider.
Cominciamo 😎
Rigidbody
Il principe dei componenti della fisica è il Rigidbody.
Una volta applicato ad un oggetto quest’ultimo diventerà attivo dal punto di vista fisico.
Cosa più importante, applicando forze differenti, tramite script, avremo la possibilità di muoverlo e controllarlo a nostro piacimento.

I parametri che è possibile controllare tramite il componente Rigidbody sono:
Mass
La massa dell’oggetto (espressa in chilogrammi).
Una massa maggiore si traduce in un peso superiore, di conseguenza l’oggetto reagirà più bruscamente alla gravità e necessiterà di forze maggiori per essere mosso.
Drag
Il Drag gestisce l’attrito con l’aria.
Di default il valore è zero e vuol dire che l’oggetto non subisce alcuna resistenza da parte dell’aria.
In queste condizioni, dopo aver ricevuto una forza, l’oggetto si continuerà a muovere all’infinito!
Aumentando il valore l’oggetto verrà frenato dall’aria, e di conseguenza rallenterà col tempo.
Angular Drag
Anche qui si parla di attrito, solo che stavolta esso è relativo alla rotazione dell’oggetto.
Se il valore è 0, l’oggetto in questione non smetterà mai di roteare su sè stesso, mentre con valori maggiori la rotazione sarà limitata.
Use Gravity
Use Gravity ti permetterà di scegliere se l’oggetto dovrà reagire alla forza di gravità o se dovrà fluttuare in aria, come se si trovasse nello spazio!
Is Kinematic
Spuntando questa casella l’oggetto non reagirà alle forze esterne (ad esempio alla gravità o agli urti con altri oggetti).
Sarà comunque possibile muoverlo tramite codice!
L’Use Gravity è utile quando si vuole far muovere un oggetto senza che subisca interferenze dall’ambiente circostante (ad esempio quando si vuole costruire una piattaforma elevatrice).
Interpolate
Senza scendere troppo nel dettaglio, in alcuni casi il movimento di un oggetto può apparire troppo brusco, macchinoso e poco realistico.
L’interpolazione è un metodo utilizzato per rendere i movimenti degli oggetti più dolci e meno bruschi.
Potresti applicarla se il tuo personaggio si dovesse muovere a scatti!
Esistono due tipi di interpolazione:
- Interpolate renderà il movimento più dolce basandosi sulla velocità del frame precedente
- Extrapolate lo farà basandosi sulla velocità stimata del prossimo frame.
Il mio consiglio è quello di provarle entrambe e di scegliere quale delle due sembra sortire effetti migliori in Play Mode!
Collision Detection
Collision Detection serve a definire con quale frequenza il Rigidbody debba verificare se esso è stato oggetto di una collisione.
Di default lo troviamo su Discrete e nella stragrande maggioranza dei casi andrà bene cosi.
Tuttavia, se il Rigidbody dovesse entrare in contatto con oggetti particolarmente veloci potrebbe perdersi la collisione e passare attraverso l’oggetto con cui avrebbe dovuto scontrarsi.
Se dunque una scena presenta un oggetto particolarmente veloce e se le collisioni non vengono registrate è necessario impostare la sua collision detection su Continuous Dynamic e quella degli altri oggetti con cui entra in contatto su Continuous.
Freeze position/rotation
Da qui è possibile bloccare la rotazione o la traslazione di un oggetto su alcuni specifici assi.
Sarà comunque possibile imporre il movimento tramite codice, e la cosa sarà un grande vantaggio in una miriade di situazioni
Pensiamo ad un gioco in 2.5D: sarà necessario limitare il movimento e la rotazione dei nostri personaggi in modo che si possano muovere solo in avanti ed indietro!
Test del Rigid Body
Ci siamo! Dopo aver visto tutti i parametri del Rigid Body è arrivato il momento di testare il suo comportamento base.
Entrando in play mode, dopo aver applicato il RigidBody ad un oggetto, potremo finalmente ammirare come esso interagisca con l’ambiente che lo circonda…
Più o meno!

Colliders
Se nell’animazione precedente la mela sprofonda nel piano è perché le manca un Collider.
Il Collider è quel componente che riesce a catturare le collisioni di un oggetto e a trasmetterle al suo Rigidbody.
Esistono diversi collider e quelli basilari sono:
- Box collider
- Sphere collider
- Capsule collider
- Mesh collider.
Sono tutti molto simili tra loro e l’unica differenza (oltre alla forma) sta nei dati in ingresso: il box collider sarà un parallelepipedo e quindi potremo modificarne altezza, larghezza e profondità, lo sphere collider sarà una sfera e quindi potremo modificarne il raggio, e così via.
Puoi aggiungere un collider a qualsiasi oggetto dall‘inspector panel cliccando su “add component> physics“.

Qualsiasi collider possiede i seguenti parametri:
- Edit Collider: Il collider appare come una gabbia verde che avvolge l’oggetto. Tramite il pulsante “edit collider” sarà possibile modificarne le dimensioni dallo scene panel (è compunque possibile modificarle tramite gli appositi parametri nell’inspector panel).
- Is Trigger: In questo modo il collider non simulerà più le collisioni, ma si limiterà a registrarle. Nel caso della mela, attivando l’Is Trigger essa passerà attraverso il piano, ma il suo collider saprà che è passata attraverso un oggetto! La cosa sarà molto utile in alcune specifiche situazioni (ad esempio posizionando un Trigger in un punto della nostra area di gioco potremo utilizzarlo come interruttore da attivare al passaggio del nostro personaggio). Torneremo a parlararne molto presto, perchè sarà fondamentale nella creazione di alcuni script!
- Material: Da qui potremo dare al nostro collider le proprietà fisiche di uno specifico materiale (ad esempio potrà diventare scivoloso come il ghiaccio, o elastico come la gomma…) creando quelli che vengono chiamati Physic materials.
Ma quale collider conviene applicare ai nostri oggetti?
Il mesh collider permette di utilizzare una mesh come collider e di rendere il più realistico possibile il comportamento dell’oggetto in questione.
Tuttavia Unity non permette di utilizzare come collider mesh molto complesse, e inoltre l’utilizzo del mesh collider ha un grosso impatto sulle prestazioni.
Il mio suggerimento è quello di utilizzare i colliders predefiniti che più approssimano la forma del nostro oggetto (nel caso della mela, uno sphere collider avrà una resa migliore di un box collider).


Un’altra strategia vincente è quella di utilizzare i cosiddetti colliders compositi.
È possibile infatti assegnare più colliders allo stesso oggetto, in modo da creare un unico collider che abbia una forma simile a quella dell’oggetto!

In ogni caso, quando si tratta di colliders è bene mantenere le cose semplici.
Usa collider compositi o mesh colliders solo per oggetti che ne hanno davvero bisogno!
Utilizzare collider basilari per oggetti che non hanno ruoli fondamentali all’interno della scena comporterà un grande risparmio di risorse.
Conclusioni
Chiaramente rigidbody e colliders sono solo i componenti fondamentali che riguardano la fisica in Unity.
Ne esistono moltissimi altri, ma molto più complessi e non fondamentali per un corso base come questo.
Adesso che conosciamo anche il rigidboody ed i collider possediamo tutti gli elementi necessari per iniziare a parlare di codice!
Nella prossima lezione infatti scriveremo (finalmente!) i primi script per i nostri videogiochi.