Lezione 02 - Spostare un Oggetto

In questa lezione impareremo a muovere un oggetto tramite l'istruzione di traslazione di un Transform.

Esistono diverse possibilità nel caso si volesse spostare un oggetto in scena: una di queste è quella di traslarlo intervenendo sul suo Transform (in particolare, i valori di position).

Per questa lezione, si consiglia di utilizzare la scena Lezione 02 - Spostare un Oggetto inclusa nel progetto di supporto.

Aprire la Scena

Una volta aperta la scena di supporto, sarà possibile visualizzare una freccia:

  • Selezioniamo il gameobject Arrow e notiamo che è già presente il componente Flow Machine.

  • Apriamo il grafo cliccando su Edit Graph nell'Inspector

  • Eliminiamo il nodo Start perché non ci servirà

L'Evento Update

L'evento che rimane, Update permette di eseguire del codice una volta per frame: per fare un esempio, se il nostro gioco gira a 100FPS (Frame per Secondo), Update verrà eseguito approssimativamente cento volte in un secondo (gli FPS non sono mai costanti).

Il nostro intento è quello di spostare di un breve passo la freccia ad ogni esecuzione.

L'Attributo Position

La posizione (position) di un oggetto è data da tre valori (x, y, z) che indicano, rispettivamente la posizione nello spazio rispetto alle direzioni destra/sinistra, su/giù, avanti/indietro. Per identificare una serie di valori di questo genere, si utilizza l'elemento Vector3.

Se volessi spostare verso l'alto un oggetto, dovrei sommare al valore y della position un numero positivo, ad esempio (0, 4, 0) Se invece volessi spostarlo verso il basso, dovrei utilizzare un valore negativo, ad esempio (0, -6, 0).

Muovere l'Oggetto

Per poter muovere la nostra freccia, utilizzeremo l'unità Translate, che permette di spostare un oggetto un una determinata direzione (data da un valore Vector3).

  • Aggiungiamo nel grafo l'unità Transform.Translate(translation)

  • Colleghiamola con l'uscita di Update

  • Nel campo translation, inseriamo i valori 0, 0, 1

  • Salviamo e premiamo Play

Una volta in esecuzione, noterete che la freccia si sposta in avanti in modo estremamente veloce (un metro per frame).

Controllare la Velocità

Al momento la velocità della freccia è stata inserita all'interno dei campi. Possiamo però cercare di controllare il tutto inserendo un valore esterno. Ci servono i seguenti elementi:

Impostare la direzione

La prima cosa che dobbiamo fare è "portare fuori" dall'unità il valore inserito.

  • Clicchiamo sulla porta di translation e trasciniamo rilasciando in un punto libero del grafo

  • Cerchiamo e selezioniamo Transform.forward (get)

L'operazione appena effettuata non cambia nulla della nostra scena (provare per credere), ma ci permette di modificare il valore in ingresso

Indipendenza dal Framerate

Al momento, lo spostamento della freccia è dipendente dai frame per secondo della nostra applicazione: infatti l'oggetto si muove di un metro per frame. Devo cercare di rendere il movimento indipendente dal tempo intercorso tra un frame e l'altro.

  • Aggiungiamo una unità Time.deltaTime (get)

  • Aggiungiamo una unità Multiply (in Math/Generic)

  • Colleghiamo le unità come in figura

  • Lanciamo l'applicazione

Quello che noteremo è che ora la freccia si muove molto lentamente: questo avviene perché abbiamo moltiplicato la nostra direzione per un numero estremamente basso: questo numero, chiamato deltaTime, è il tempo intercorso tra un frame e l'altro.

Abbiamo quindi ottenuto l'indipendenza dal framerate: dobbiamo solamente permettere di gestire la velocità di movimento.

Velocità di Movimento

Per aumentare (o diminuire) la velocità con cui l'oggetto viene traslato, è sufficiente moltiplicare il valore per un numero:

  • Aggiungiamo un altro nodo Multiply (in Math/Generic)

  • Aggiungiamo anche un nodo float Literal che ci permette di inserire un numero decimale (nel mio caso ho utilizzato 15)

  • Colleghiamo i nodi come in figura

  • Lanciamo l'applicazione (non dimentichiamoci di salvare!)

Noterete che la freccia ora si sposta ad una determinata velocità: modificando il valore decimale potrete rendere il movimento più veloce o più lento.

Esercizi Integrativi

Come esercizio addizionale, completare:

  • L'Esercitazione 02 - Muovere e Ruotare un Oggetto

Last updated