‫Ciao e bentornato.
‫In questo video parleremo di come possiamo velocizzare il nostro carro armato.
‫Vorremmo controllare esattamente la velocità con cui si muove il nostro carro armato.
‫E in questo momento stiamo solo passando in questo vettore di posizione delta in add act, un offset locale, e non
‫abbiamo alcun controllo sulla velocità con cui si muove il serbatoio.
‫In realtà si sta muovendo abbastanza lentamente.
‫Quindi creeremo una variabile di velocità che possiamo usare per controllare quella velocità.
‫E terremo anche conto della frequenza dei fotogrammi del nostro gioco poiché il nostro gioco sta cambiando la frequenza dei fotogrammi da
‫un fotogramma all'altro.
‫In realtà non stiamo ottenendo un movimento coerente.
‫Quindi, per tenere conto di quel frame rate, parleremo di qualcosa chiamato Delta Time.
‫Quindi siamo qui nell'editor e se premo play e inizio a spostare il tank, non è
‫qualcosa che puoi davvero notare.
‫Ma il nostro carro armato non si muove a una velocità costante da un fotogramma all'altro.
‫E il motivo è perché il nostro frame rate cambia e qui in alto a sinistra del viewport c'è un piccolo
‫menu a discesa.
‫Se faccio clic su questo, c'è una casella di controllo accanto per mostrare DPS PES significa fotogrammi al secondo.
‫Se controllo questo, in alto a destra vedo i miei fotogrammi al secondo.
‫E appena sotto, quanti millisecondi sono trascorsi dall'ultimo fotogramma?
‫E questi valori cambiano da fotogramma a fotogramma.
‫Se avessi premuto play, avresti potuto perderlo, ma il frame rate è diminuito e poi è risalito
‫perché durante quella fase iniziale del gioco stavano succedendo molte cose.
‫Tutti gli attori stavano chiamando le loro funzioni di inizio del gioco e ce ne sono alcuni dietro le quinte per
‫il mondo.
‫Ora, se inizio a giocare, le 120 app che ricevo cambiano da un fotogramma all'altro, anche se
‫si aggirano intorno a 120.
‫Quindi il motivo per cui ciò causa movimenti incoerenti è perché quando la frequenza dei fotogrammi diminuisce, quegli aggiornamenti
‫di tick vengono chiamati meno spesso.
‫E se spostiamo questo serbatoio della stessa quantità ogni fotogramma, allora ci affidiamo a quel frame
‫rate per rimanere coerente, per ottenere quel movimento coerente.
‫E quando il gioco diventa più complicato, le variazioni del frame rate peggioreranno sempre di più.
‫Quindi dobbiamo assicurarci di adattarci a questo utilizzando qualcosa chiamato Delta Time.
‫Allora, cos'è questo misterioso tempo Delta?
‫Bene, diciamo che abbiamo questa sequenza temporale qui che inizia a 0 secondi e aumenta con il passare del tempo.
‫Ora, con il passare del tempo, ciò significa che la funzione tick è stata chiamata.
‫Ma nota che la funzione tick non è molto coerente.
‫A volte viene chiamato molto rapidamente e talvolta viene chiamato meno spesso.
‫Questo perché il tuo computer deve eseguire calcoli fotogramma per fotogramma e, a volte, questi calcoli
‫richiedono più risorse dal tuo computer e ciò può rallentare la nostra frequenza fotogrammi.
‫Ora, questa variabile delta time che abbiamo nella funzione tick è la quantità di tempo che
‫è passata dall'ultimo fotogramma.
‫Quindi qui potrebbe essere 0. 1 secondo.
‫Dipende davvero dall'utilizzo della CPU e da come varia.
‫Quindi, al variare dell'utilizzo della CPU, varierà anche il tempo delta.
‫E questo significa che quando abbiamo più fotogrammi al secondo, abbiamo più chiamate di funzione.
‫Ora, se chiamiamo add attore locale offset più spesso, vedremo il nostro laghetto muoversi più velocemente e
‫non avrà una velocità di movimento costante.
‫Quindi la soluzione è scalare il movimento in base al tempo Delta.
‫Quindi se il tempo delta è 0. 1 e vogliamo spostare il nostro stagno di,
‫diciamo, dieci centimetri al secondo, scalando quel movimento di 0. 1 secondo ci fornisce l'esatta quantità di movimento di cui abbiamo bisogno per un tempo di aggiornamento del
‫frame di 0. 1 secondo.
‫Ora considera questa parte qui in cui abbiamo un tempo delta più piccolo, il che significa che TIC viene chiamato
‫più spesso.
‫Diciamo che il tempo delta qui è 0. 0 1 secondi.
‫Quindi il TIC viene chiamato dieci volte più spesso qui.
‫Bene, potremmo semplicemente ridimensionare il nostro movimento di 0. 01 per questo particolare fotogramma, e in questo modo sposteremo il nostro
‫stagno di dieci centimetri al secondo volte, 0. 0 1 secondi.
‫Quindi, quindi, stiamo spostando lo stagno una piccola quantità poiché TIC viene chiamato molto più frequentemente.
‫In questo modo si assicura che il nostro laghetto si muova in modo coerente indipendentemente dai cambiamenti nel frame
‫rate.
‫Quindi, tornando al codice VSE, pensiamo a come ci piace occuparci di questo problema.
‫Abbiamo il nostro vettore di posizione delta e stiamo impostando la sua x uguale a valore, ma sappiamo che vorremmo ridimensionare il
‫valore in base al tempo delta.
‫Quindi inserirò un piccolo commento qui e dirò che X è uguale a value times, delta time, il che significa che vorremmo ridimensionare il valore
‫in base al tempo delta.
‫Ora, una volta fatto questo, renderemo il valore molto piccolo perché il tempo delta stesso è un valore molto
‫piccolo, specialmente se il tuo frame rate è molto alto.
‫Quindi dovremo anche ridimensionare questo di qualcosa.
‫Altrimenti una sorta di variabile di velocità, e possiamo decidere quale dovrebbe essere questo valore per controllare la
‫velocità dei serbatoi.
‫Quindi abbiamo un po' di pseudocodice qui per guidarci e ora dobbiamo solo implementarlo creando un valore
‫per la velocità e scoprendo come possiamo ottenere questo valore delta time.
‫Quindi parliamo di come possiamo accedere al tempo Delta dalla funzione di spostamento.
‫Ora, Unreal Engine ha diversi modi per ottenere il tempo Delta.
‫In effetti, se osservi la funzione tick che abbiamo in base a Delta, il tempo è un parametro di input float.
‫Quindi, se stiamo lavorando nella funzione tick, abbiamo già accesso al tempo Delta, ma in tank DHCP, la nostra
‫funzione di spostamento non ha quel parametro di input, ma il motore irreale ha i suoi modi.
‫Un modo è accedere a una funzione chiamata get world delta seconds, che esiste in una classe chiamata U
‫gameplay statics.
‫Come suggerisce il nome, la statica di gioco ha molte funzioni statiche che aiutano nella programmazione del gioco.
‫Ottieni secondi del delta mondiale restituisce il tempo delta.
‫Ora ha un parametro di input.
‫Qui prende un oggetto di contesto mondiale.
‫Lo vedrai molto in Unreal Engine.
‫Molte funzioni statiche richiedono un oggetto di contesto mondiale.
‫Il mondo è un oggetto del tipo tu mondo.
‫È l'oggetto di livello più alto del nostro gioco.
‫Rappresenta la nostra mappa che contiene tutti gli oggetti associati nel nostro gioco.
‫Ora funzioni statiche come ottenere i secondi delta del mondo non hanno idea in quale mondo ci troviamo.
‫Dobbiamo dire a questa funzione in quale mondo ci troviamo in modo che possa accedere a quel mondo e ottenere quel valore
‫delta time.
‫Ora, per dirgli in quale mondo ci troviamo, possiamo passare un puntatore a un oggetto che esiste in
‫quel mondo.
‫Mentre lavoriamo nella classe tank, possiamo passare la parola chiave this.
‫Questa è una parola chiave che possiamo usare all'interno di qualsiasi classe in C++.
‫Qual è questa parola chiave, è un puntatore all'istanza di qualsiasi oggetto particolare su cui stiamo lavorando.
‫Quindi, se stiamo lavorando nella classe tank, questo è un puntatore al tank in cui ci troviamo.
‫Quindi le funzioni che richiedono un oggetto di contesto mondiale possono spesso riceverlo come parametro di input perché il tank
‫in cui stiamo lavorando esiste nel mondo corretto.
‫Quindi, ottieni i secondi delta del mondo saprà in quale mondo si trova e potrà recuperarci il delta appropriato.
‫Tempo per quel mondo.
‫Quindi, se stiamo chiamando get world delta secondi dall'interno della classe --, lo passeremo come
‫oggetto di contesto mondiale.
‫Quindi ora hai tutti gli strumenti necessari per controllare la velocità dei serbatoi.
‫Quindi quello che farai è creare una variabile di velocità, renderla un galleggiante e inserirla in una
‫sezione privata nella classe tank.
‫Ora esponi questo ai progetti in modo che possiamo regolarlo mentre lo stiamo sviluppando, il
‫che significa che gli darai una tua proprietà e utilizzerai gli identificatori di proprietà appropriati che corrispondono al
‫livello di esposizione che desideri.
‫Ora nella funzione MOV, abbiamo quel bit di pseudo codice che abbiamo inserito come commento.
‫Quindi usalo come guida.
‫Prenderai la posizione del delta, il vettore F e la scala.
‫È X per delta.
‫Abbiamo appena visto come possiamo accedere al tempo delta usando le statistiche di gioco di U.
‫E scalerai anche X in base alla variabile di velocità.
‫Ora, poiché stiamo usando una funzione nelle statistiche di gioco, dovrai includere il file di intestazione per
‫le statistiche di gioco.
‫Ora ti ho mostrato più volte come trovo l'inclusione per una classe particolare usando la documentazione del
‫motore irreale.
‫Quindi ti sfiderò a cercare le tue statistiche di gioco nella documentazione di Unreal Engine e trovare
‫quel file di intestazione.
‫E se non riesci a trovarlo, trova il link nelle risorse di questo video, che ti fornirà la
‫documentazione per le tue statistiche di gioco ma prova a trovarlo da solo.
‫Per prima cosa metti in pausa il video e controlla la velocità del serbatoio ora.
‫Bene.
‫Quindi ho il mio pseudo codice per guidarmi e ho bisogno di ridimensionare il valore in base al tempo delta e alla velocità.
‫Quindi prima creerò la mia variabile di velocità.
‫Ora di nuovo in vasca h.
‫Qui è dove posso posizionare la variabile di velocità.
‫Tuttavia, se ricorderai da un esercizio di pratica in una lezione precedente, ho aggiunto un galleggiante chiamato Speed alla
‫classe Base Pond.
‫Ora non ho bisogno della variabile di velocità qui nello stagno di base.
‫Era solo pratica, quindi non ne ho davvero bisogno qui.
‫In effetti, non ho bisogno di questi altri 30 due che ho creato per dimostrare che specificatori di proprietà.
‫Quindi evidenzierò tutti questi elementi e li eliminerò dalla classe dello stagno di base.
‫Non li voglio più.
‫Quindi se ne sono andati.
‫Ora, potresti anche ricordare che ho fatto riferimento a quella variabile di velocità nel progetto del serbatoio dello stagno.
‫Quindi ho intenzione di aprire il serbatoio dello stagno BP.
‫E qui nel grafico degli eventi, c'è quella variabile di velocità a cui ho fatto riferimento.
‫Dal momento che non ne ho più bisogno, andrò avanti ed eliminerò quei nodi e compilerò e salverò il
‫mio serbatoio del laghetto BP.
‫Bene.
‫Dopo aver ripulito tutto, torno nel serbatoio per aggiungere la mia variabile di velocità.
‫E questo sarà nella sezione privata qui.
‫Lo aggiungerò appena sopra la funzione di spostamento e sarà un float chiamato speed.
‫Ora ho intenzione di dargli un valore iniziale qui.
‫Penso che proverò 200 F e vedrò come funziona.
‫Ma dal momento che mi piacerebbe essere in grado di modificarlo nell'editor mentre lo sto sviluppando, otterrà una
‫nuova macro di proprietà e mi piacerebbe poterlo modificare sulle istanze e sull'impostazione predefinita.
‫Quindi lo farò modificare ovunque.
‫Ora, non dovevi farlo, ma gli sto dando una categoria.
‫Creerò una nuova categoria chiamata movimento.
‫Ora esporlo al grafico degli eventi è facoltativo.
‫Mi tratterrò perché non penso che avrò bisogno di accedervi nel grafico degli eventi.
‫Se ne ho bisogno.
‫In futuro, posso esporlo con blueprint, leggere, scrivere o blueprint di sola lettura e utilizzare quel meta che
‫consente l'accesso privato specificato.
‫Ma per ora non lo farò.
‫Quindi ho una variabile di velocità e qui nel serbatoio DHCP, prenderò valore e lo scalerò in base alla velocità.
‫Ora l'ultima cosa da fare è scalare il valore in base al tempo delta, il che significa che ho bisogno delle tue statistiche di gioco.
‫Quindi ecco la documentazione di Unreal Engine.
‫Andrò avanti e cercherò le tue statistiche di gioco ed ecco le tue statistiche di gioco.
‫Quindi ho solo bisogno di scorrere verso il basso fino alla riga di inclusione e copiarlo e tornare nel serbatoio CP.
‫Posso incollarlo.
‫Ora che ho accesso a nuove statistiche di gioco, posso ottenere il tempo Delta, quindi moltiplicherò per te.
‫Le statistiche di gioco ottengono secondi delta del mondo e, come abbiamo visto, questo richiede un oggetto contesto mondiale.
‫Puoi anche vedere con il pop-up che sta chiedendo un oggetto contesto mondiale.
‫Quindi ho intenzione di passare in questo.
‫Quindi ora che sto impostando le posizioni Delta X per valutare tempi, velocità, tempi, tempo delta,
‫compilerò questo.
‫Quindi abbiamo una compilazione di successo.
‫Quindi, qui nell'editor, posso entrare in BP Pond Tank e c'è la mia velocità proprio lì.
‫E se seleziono l'istanza del serbatoio nel mondo, posso cercare nel pannello dei dettagli il movimento e c'è la
‫velocità e posso impostarla su qualsiasi valore mi piace.
‫Se lo alzo al massimo e premo play, allora mi muovo un po' più velocemente.
‫Quindi questo è il vantaggio di esporre la variabile ai progetti.
‫Posso sperimentare e trovare una buona velocità che funzioni per me.
‫Va bene, quindi sembra fantastico.
‫Ho intenzione di andare avanti e smettere di mostrare l'FPSO ora.
‫E ora abbiamo la nostra variabile di velocità e possiamo cambiarla.
‫E quel cambiamento si rifletterà nel movimento del mio pedone.
‫Quindi ora stiamo controllando la velocità di movimento del nostro carro armato e abbiamo una bella variabile di velocità
‫che esponiamo ai progetti e possiamo impostarla mentre stiamo sviluppando un esperimento con il suo valore.
‫Abbiamo anche imparato a conoscere il tempo delta e perché è importante scalare i nostri movimenti in base al tempo delta.
‫Quindi è indipendente dal frame rate poiché le modifiche al frame rate continueranno a ottenere movimenti fluidi e coerenti con il
‫nostro serbatoio.
‫Quindi, guardando indietro al nostro piano di sezione, abbiamo quasi finito con il nostro primo punto elenco.
‫Abbiamo creato un carro armato e può muoversi in tutto il mondo.
‫Il nostro secondo punto è gestire l'input con il movimento della tastiera WASD e anche l'input del mouse.
‫Abbiamo la parte W e SW giù, ma dobbiamo ancora essere in grado di usare i tasti A e D e
‫li useremo per ruotare il serbatoio.
‫Quindi stiamo facendo buoni progressi nei video a venire.
‫Lavoreremo per completare la nostra capacità di spostare il serbatoio.
‫Ci vediamo presto.