‫Ciao e bentornato.
‫Ora, in questo video, inizieremo a parlare di come possiamo spostare il nostro carro armato.
‫Quindi, per spostare il serbatoio, dovremo aggiungere una sorta di offset e un motore irreale.
‫Quando si tratta di aggiungere un offset, dobbiamo decidere se effettuare l'offset nello spazio locale
‫rispetto allo spazio mondiale.
‫Quindi discutiamo la differenza tra queste due cose.
‫Ora, qui nell'editor, ho selezionato -- tank, e non appena ho selezionato questo,
‫noterai che c'è un gizmo.
‫È così che si chiama questa cosa, un aggeggio.
‫Ha tre frecce e ognuna ha un colore diverso.
‫Ora, se non l'hai notato, in basso a sinistra dello schermo c'è un altro aggeggio più piccolo.
‫E questo sembra simile al gizmo dell'attore che stiamo selezionando.
‫Quindi, se scelgo un attore, otteniamo sempre questo aggeggio.
‫E, naturalmente, il gizmo cambia quando passiamo da traslazione a rotazione in modalità scala.
‫Quindi finché siamo in traduzione, a cui possiamo accedere da questa icona più a sinistra in alto
‫a destra della finestra o con il tasto W, abbiamo la possibilità di spostare le cose o tradurle trascinando una delle
‫frecce sulla gizmo.
‫E i colori corrispondono agli assi rossi poiché l'asse x verde è l'asse y e il blu è l'asse z.
‫Ora, se ruotiamo la nostra vista e guardiamo in una direzione diversa, vedremo che quel gizmo punta ancora
‫nella stessa direzione originale.
‫E mentre stiamo ruotando, il gizmo in basso a sinistra del viewport ruota perché la direzione
‫del mondo non cambia.
‫Fin qui tutto bene.
‫Ora quello che stiamo guardando sono le direzioni spaziali del mondo, ma per ogni attore nel mondo c'è una direzione
‫locale.
‫E possiamo vederlo facendo clic su questa icona che sembra un mondo e il pop-up dice cicli, il gizmo di trasformazione
‫coordina i sistemi di coordinate tra il mondo e lo spazio locale.
‫Quando vediamo un mondo qui, significa che stiamo guardando lo spazio del mondo, ma se ci clicchiamo
‫sopra, ora si trasforma in un cubo e ora stiamo guardando lo spazio locale per l'attore dato che abbiamo selezionato.
‫Il gizmo in basso a sinistra del viewport ci mostra ancora lo spazio mondiale.
‫Ma se prendo questo attore e passo alla modalità di rotazione e lo ruoto, quando tornerò alla modalità
‫di traduzione, vedrai che il gizmo ora punta in una direzione diversa.
‫L'attore stesso ha il proprio asse x locale.
‫Possiamo pensare all'asse x dell'attore come al suo vettore diretto.
‫Ora nota che nella parte inferiore sinistra dello schermo quel gizmo punta ancora nella stessa direzione.
‫Ma questo attore qui, il carro dei pedoni, ha la sua direzione X locale e punta in una direzione
‫diversa.
‫Ora, se clicco sul cubo qui e lo trasformo di nuovo in un mondo ora, il gizmo per il carro armato è abbinato e allineato
‫con la direzione dell'asse del mondo in modo che possiamo passare dal mondo allo spazio locale affinché qualsiasi attore
‫possa vedere il suo locale direzione contro la sua direzione del mondo.
‫Quindi abbiamo visto che per ogni attore che selezioniamo nel nostro mondo, ha una sua direzione locale.
‫E questo potrebbe essere diverso o meno dalla direzione del mondo come indicato in questa immagine qui.
‫Quindi questo è molto importante quando si tratta di spostare oggetti in Unreal Engine.
‫Esistono funzioni per spostare gli oggetti e un diverso insieme di funzioni per spostarsi nello spazio mondiale
‫rispetto allo spazio locale.
‫Diciamo che il nostro serbatoio è rivolto in questo modo e il suo asse x punta leggermente a sinistra, come indicato dalla
‫freccia che ho disegnato qui sul serbatoio.
‫Ora possiamo vedere, sulla base di questo gizmo in basso a sinistra, che la direzione dell'asse x del mondo punta
‫a destra.
‫Quindi il carro armato non è allineato alla direzione dello spazio mondiale.
‫Ora, supponiamo di dover spostare questo carro armato nello spazio mondiale nella direzione X positiva.
‫Quindi, anche se il serbatoio punta a sinistra, si muoverà comunque in quella direzione x del mondo e sembrerà
‫che si stia muovendo all'indietro.
‫Quindi non è quello che vogliamo.
‫Ora, d'altra parte, supponiamo di utilizzare una funzione progettata per spostare il serbatoio nel proprio spazio
‫locale.
‫Ciò significa che se spostiamo il carro armato nella sua direzione X locale, andrà avanti nella direzione che ti
‫aspetteresti.
‫E questo è il comportamento che vogliamo.
‫Ora in Unreal Engine.
‫La funzione che può fare questo per noi si chiama Add Actor Local Offset.
‫Questa funzione sposta l'attore in una direzione locale.
‫Ora applica un offset, che è un singolo movimento.
‫In sostanza, gli diciamo in quale direzione muoversi e quanto lontano, e sposta quell'oggetto una volta, il che significa
‫che chiameremo questa funzione ogni fotogramma in cui vogliamo spostare il serbatoio.
‫Quindi lo sposteremo con piccoli incrementi da quando chiameremo una funzione ogni fotogramma.
‫Significa che lo stiamo chiamando molto ora per il nostro carro armato, il suo asse X locale è la sua direzione in avanti.
‫Quindi questo è l'asse che useremo quando aggiungiamo un offset locale.
‫Ora ecco la documentazione del motore irreale per l'offset locale dell'attore ADD.
‫Vedi che è una funzione che appartiene alla classe attore.
‫Ecco perché ora si chiama add attore locale offset perché esiste nella classe attore.
‫I pedoni erediteranno questa funzione in modo che possiamo usarla.
‫Ora ecco la sintassi.
‫Ha quattro parametri di input.
‫Il primo è un vettore F chiamato posizione delta.
‫Quindi avremo bisogno di creare un vettore F che possiamo passare a questa funzione di offset locale dell'attore aggiunto.
‫Quindi sappiamo di questo offset locale dell'attore aggiunto.
‫E mi piacerebbe sperimentare questo solo per vedere come funziona in modo da poterlo fare nella funzione tick.
‫Ora non stiamo sovrascrivendo la funzione tic qui nella classe tank, ma l'abbiamo nella classe base
‫pong.
‫Se andiamo allo stagno di base CP qui abbiamo la funzione tic e non stiamo facendo nulla qui e questo è perfetto
‫per fare un po' di sperimentazione.
‫Quindi quello che farò è digitare, aggiungere, attore, offset locale proprio così.
‫E farò clic con il pulsante destro del mouse e selezionerò vai alla definizione.
‫Ora qui nel file CP dell'attore, abbiamo la definizione di ADD Actor Local Offset.
‫Ora nota qualcosa di interessante.
‫Sta verificando se il componente root non è nullo e se non è nullo, chiama questa funzione add local
‫offset.
‫Quindi in realtà quello che stiamo facendo è aggiungere un offset al componente radice.
‫E poiché tutti gli altri componenti sono collegati al componente radice, si sposteranno insieme ad esso.
‫Quindi è importante notare che quando aggiungiamo un offset locale, spostiamo il componente radice e tutto il
‫resto si muove semplicemente con esso.
‫Ora, se passiamo con il mouse su aggiungi offset locale, vedremo che tutti e quattro i parametri di input sono elencati
‫qui.
‫E a parte il primo, che è un vettore F, gli altri hanno valori predefiniti.
‫Si noti che bool B sweep dice uguale a falso.
‫Anche il terzo e il quarto parametro di input hanno questi valori predefiniti.
‫Ciò significa che se chiamiamo questa funzione e non trasmettiamo input per gli ultimi tre parametri di input, verranno impostati su
‫questi valori per impostazione predefinita.
‫Ora chiuderò l'attore CP e qui nella funzione di spunta dello stagno di base vorrei chiamare aggiungi attore locale offset
‫ogni fotogramma solo per vedere come funziona.
‫Ora sappiamo che il primo parametro di input è un vettore F.
‫Si chiama posizione delta.
‫Questa è la quantità di movimento che vorremmo aggiungere ogni volta che chiamiamo questa funzione.
‫Quindi creerò un vettore F chiamato posizione delta.
‫Quindi posizione del delta del vettore F.
‫Ora vorrei azzerare questo vettore.
‫In altre parole, assicurati che sia inizializzato con tutti zeri.
‫Ora voglio un vettore zero che posso passare a zero f, an x, yez otterranno tutti zero f.
‫Quindi questo servirà bene ai miei scopi.
‫Ora prenderò la posizione Delta X e la cambierò in due punti F.
‫In questo modo abbiamo un vettore con Y e Z a zero, una x a due.
‫Quindi andrò avanti e passerò la posizione di Delta per aggiungere l'offset locale dell'attore come una sorta di esperimento.
‫Ora posso cavarmela chiamando add attore offset locale e passando semplicemente il primo parametro di input poiché
‫gli altri tre sono facoltativi.
‫Quindi lo compilerò e vedrò cosa succede.
‫Ora, se andiamo avanti e premiamo play, notiamo un paio di cose.
‫Prima di tutto, guarda, anche la torre si sta muovendo.
‫Questo perché lo mettiamo nella funzione tick per il pedone base ed entrambi questi legami ereditano dal pedone
‫base.
‫Quindi, in effetti, tutti questi stagni si stavano muovendo.
‫E la cosa interessante è che si stanno muovendo tutti nella propria direzione dell'asse x.
‫Possiamo vedere tutto muoversi in una volta da questo punto di vista.
‫Se facciamo clic sul menu a discesa accanto a giocare e selezioniamo simula, questo ci consente di giocare senza
‫possedere laghetti.
‫Quindi, se faccio clic su Simula, controlla questo.
‫Ogni stagno si muove nella propria direzione dell'asse x.
‫In realtà è piuttosto strano e piuttosto interessante.
‫Quindi questo ci mostra come funziona l'offset locale dell'attore pubblicitario.
‫Muove le cose nelle loro direzioni locali.
‫Ora possiamo uscire dalla modalità di simulazione facendo clic sul menu a discesa e selezionando la vista selezionata
‫e questo ci consentirà di giocare nella modalità di gioco normale.
‫Va bene, la fermerò e potremo tornare alla base -- e rimuovere questo codice sperimentale.
‫Andrò avanti e lo eliminerò dalla funzione tick, quindi ora sappiamo come funziona l'aggiunta dell'offset
‫locale dell'attore.
‫Quindi torniamo a Tank CP e qui abbiamo la funzione MOVE.
‫Sappiamo che questa funzione viene chiamata ogni singolo frame e sappiamo che il valore è uguale a uno.
‫Se stiamo premendo il tasto W ed è negativo, se stiamo premendo il tasto ed è zero se stiamo premendo entrambi
‫o nessuno dei due.
‫Quindi, per la tua sfida, sposterai il serbatoio usando l'offset locale dell'attore aggiunto.
‫Quindi nella funzione MOV creerai un vettore F chiamato posizione delta.
‫Ora assicurati di azzerare X, Y e z.
‫Puoi farlo in molti modi, ad esempio usando uno dei vari costruttori di vettori f.
‫Ora, una volta che hai azzerato tutti i componenti, imposta la sua x sul valore del parametro di input mobile
‫nella funzione MOV.
‫Una volta che hai fatto questo, vai avanti e chiama add attore offset locale passando nella posizione delta.
‫Metti in pausa il video e fallo ora.
‫Bene.
‫Quindi sono tornato qui nel file CP del serbatoio.
‫Ora, non ho più bisogno di questo registro EWI, quindi lo eliminerò e creerò un vettore
‫F chiamato Posizione delta.
‫Ora posso usare uno dei costruttori di vettori F.
‫Ti ho già mostrato come creare un nuovo vettore con tutti zeri.
‫Ti mostrerò un altro modo, ovvero inizializzarlo con f vector, zero vector.
‫E questo è esattamente quello che sembra, un vettore con zero per ogni componente.
‫Questo è solo per mostrarti un modo alternativo.
‫Quindi abbiamo un vettore zero.
‫Ora prenderò la posizione delta X e la imposterò uguale a valore.
‫E infine posso chiamare l'offset locale add attore che passa nella posizione delta.
‫Quindi compiliamo questo e torniamo qui nell'editor, prenderò il mio carro armato e lo orienterò
‫in modo che sia rivolto verso la direzione X del mondo e poi posso premere play e ora facendo clic nella finestra.
‫Se premo il tasto W vado avanti e se premo il tasto torno indietro.
‫Se premo entrambi, si annullano a vicenda e non mi muovo affatto.
‫E ovviamente, se non premo niente, non mi muovo nemmeno.
‫Quindi ora abbiamo il movimento per il nostro carro armato, ma è un po' lento, quindi dovremo fare un po' di aggiustamento.
‫E parleremo anche della messa a punto di questa meccanica di movimento con il nostro carro armato.
‫Quindi, in sintesi, abbiamo imparato a conoscere ADD Actor, l'offset locale e la differenza tra spazio mondiale
‫e spazio locale.
‫Nel prossimo video, continueremo a perfezionare questa meccanica di movimento con il nostro carro armato.
‫Ci vediamo presto.