In questo brevissimo tutorial di programmazione in Unity 2D, vi mostro come fare in modo che la telecamera segua il personaggio principale con un piccolo ritardo, anziché istantaneamente, così da realizzare transizioni più morbide.



Trascrizione del video

Salve a tutti! In questo brevissimo tutorial di programmazione in Unity 2D, vi mostro come fare in modo che la telecamera segua il personaggio principale con un piccolo ritardo, anziché istantaneamente, così da realizzare transizioni più morbide.

Il tutorial è rivolto a chi conosce già il concetto di Delta Time in Unity e, possibilmente, le interpolazioni, come ad esempio Slerp. A questi concetti ho già dedicato altri tutorial di base, che trovate in forma video in Inglese sul canale e in forma testuale, in varie lingue, sul mio sito web.

Nell'esempio che mostrerò, realizzerò il codice per il movimento lungo l'asse X, per semplicità, ma potrà essere facilmente esteso anche al movimento in verticale, lungo l'asse Y.

Iniziamo dallo script base, ossia quello che vincola la posizione della telecamera alla posizione del personaggio da seguire. Lo script, qui chiamato Camera Controller, presenta da subito una variabile privata di tipo Transform alla quale andrà associato, nell'editor, l'oggetto da seguire, così da poterne recuperare la posizione.

Nella funzione Update, abbiamo una variable di tipo float che recupera la coordinata X della posizione del giocatore e che viene utilizzata, nella posizione della telecamera, al posto della posizione X della telecamera stessa, in un valore chiamato Camera X, per cui la telecamera seguirà il personaggio in maniera istantanea.

La prima variante che proviamo fa uso di Lerp, per cui introduco una variabile privata chiamata Follow Time, di tipo float, che può essere modificata nell'editor per tararla. Nella funzione Update, faccio uso dell'opzione numero 2 per definire la coordinata X della telecamera, che adesso sarà data dal risultato della funzione Lerp.

Lerp è una funzione nativa di Unity che realizza un'interpolazione lineare tra la posizione attuale dell'oggetto, dato da Transform Position, e la posizione di destinazione, data da Player Position. Il parametro di interpolazione è rappresentato dal rapporto tra Delta Time e la variabile Follow Time, che consente di controllare la velocità con cui la telecamera si avvicina progressivamente alla posizione del target e permette di regolare facilmente questo comportamento anche durante l'esecuzione nell'editor.

Con la funzione Lerp, quindi, ad ogni fotogramma la telecamera aggiorna la propria posizione, avvicinandosi progressivamente al target. In questo modo, il movimento della telecamera appare meno brusco rispetto a uno spostamento istantaneo. Tuttavia, Lerp realizza un'interpolazione lineare senza smorzamento della velocità in prossimità della destinazione, e questo può rendere il movimento meno naturale nelle fasi finali dell'avvicinamento. Per ottenere una transizione più morbida entra quindi in gioco il metodo Smooth Damp.

Rendo quindi disponibili due nuove variabili, chiamate Smooth Time e Velocity. In particolare, Smooth Time è un float privato che ci servirà per tarare l'interpolazione, proprio come Follow Time nel caso di Lerp. La variabile Velocity è invece un float passato al metodo Smooth Damp per memorizzare la velocità corrente durante l'esecuzione.

Il metodo nativo Smooth Damp ci consente di implementare un movimento meno brusco, ammortizzato, per cui la velocità diminuisce man mano che ci si avvicina alla posizione di destinazione. La variabile Velocity rappresenta la velocità corrente della telecamera lungo l'asse considerato. Velocity viene passata al metodo per riferimento e aggiornata automaticamente ad ogni frame durante l'interpolazione.

Nel codice, quindi, la coordinata X della telecamera è ora il risultato di un'interpolazione realizzata da Smooth Damp, concettualmente simile a Lerp perché realizza un'interpolazione tra due valori, ma che realizza un'interpolazione più dolce e che, nella firma del metodo, utilizza anche la variabile float Velocity.

Smooth Damp può essere visto come un'evoluzione di Lerp che introduce uno smorzamento progressivo della velocità, rendendo il movimento più naturale.

Bene, anche per questo video è tutto! Se vi è stato utile, potete ringraziarmi con un bel Like e iscrivendovi al canale! A presto!

Questo sito ha il solo scopo di mostrare alcuni dei miei lavori senza alcuna intenzione promozionale. Si prega di notare che attualmente non sto cercando (né risponderò a) richieste di lavori personalizzati, consulenze o altre collaborazioni lavorative, di qualsiasi tipo.


INFORMATIVA ESTESA SULL'UTILIZZO DEI COOKIES