Compatibile con Unity 5

I principi della fisica in Unity 3D

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.

Rigidbody

Il principe dei componenti della fisica è il Rigidbody: una volta applicato ad un oggetto quest’ultimo diventerà attivo dal punto di vista fisico, e (cosa più importante) applicando forze differenti, tramite script, avremo la possibilità di muoverlo e controllarlo a nostro piacimento.

imm801

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: Questo parametro 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: Questa casella 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 oggett) , ma sarà comunque possibile muoverlo tramite codice! 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: applicala se il tuo personaggio sembra si muova a scatti! Esistono due tipi di interpolazione: Interpolate ed Extrapolate. La prima renderà il movimento più dolce basandosi sulla velocità del frame precedente, mentre la seconda 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: 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!)

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!

801

Se Newton avesse osservato una mela passare attraverso il suolo, probabilmente sarebbe svenuto per lo shock!

Colliders

Se nell’animazione precedente la mela sprofonda nel piano è perché le manca un Collider: ovvero quel componente che riesce a catturare le collisioni di un oggetto e a trasmetterle al suo Rigidbody. Esistono diversi collider e quelli basilari sono il box collider, lo sphere collider, il capsule collider ed il 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”.

imm802

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).804
  • 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).

Uno Sphere collider applicato alla nostra mela: adesso questa rotola giù dal piano come se fosse una sfera!

Uno Sphere collider applicato alla nostra mela: adesso questa rotola giù dal piano come se fosse una sfera!

Sempre la solita mela, ma stavolta con un box collider. Adesso la mela scivolerà lungo il piano come se fosse un cubo!

Sempre la solita mela, ma stavolta con un box collider. Adesso la mela rotolerà lungo il piano come se fosse un cubo!

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!

Questa volta la mela possiede due sphere collider: ok, una mela non dovrebbe comportarsi così, ma rimanendo in tema frutta un collider del genere andrebbe bene per una pera!

Questa volta la mela possiede due sphere collider: ok, una mela non dovrebbe comportarsi così, ma rimanendo in tema frutta un collider del genere andrebbe bene per una pera!

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 sriveremo (finalmente!) i primi script per i nostri videogiochi.

Torna a: Unity Bootstrap: Corso gratuito sviluppo giochi con Unity 3D. Le basi di Unity dalla A alla Z > La parte logica

Start typing and press Enter to search