‫Ciao e bentornato.
‫Ora abbiamo creato un carro armato che può muoversi e persino ruotare la sua torretta.
‫E ora siamo pronti per creare una classe tower che possa ereditare alcune delle funzionalità che il
‫tank ha ereditato dalla classe base pod.
‫Ora, una volta creata una classe torre, sovrascriveremo la funzione tick in modo da poter ruotare
‫anche la sua torretta.
‫Quindi il nostro obiettivo qui è far ruotare le torrette in modo che guardino sempre il carro armato.
‫In questo modo, quando iniziano a sparare proiettili, colpiranno il carro armato a volte fintanto che il carro armato
‫non si sta muovendo rapidamente.
‫E scopriremo anche come riuscire a tenere in mano il carro armato --.
‫In questo modo possiamo puntare il carro armato -- e ruotare la torretta delle torri verso il carro --.
‫Ci stiamo preparando per un po' di combattimento a proiettili.
‫Quindi sono qui nell'editor e andrò nella nostra cartella dei carri armati dove si trovano la base e
‫le classi dei carri armati.
‫Ora, vorrei creare una classe tower basata sulla classe base.
‫Ora, il modo in cui l'abbiamo fatto con la classe tank era quello giusto.
‫Fare clic su base e selezionare Crea classe C++ derivata da un modo alternativo per accedere
‫agli strumenti e selezionare una nuova classe C++.
‫E da qui possiamo fare clic sulla scheda che dice tutte le classi e cercare base --.
‫E qui vediamo la nostra base: la classe.
‫Se seleziono questo e faccio clic su Avanti, ora creerò una nuova classe basata su base --.
‫Lo lascerò sullo stesso percorso di tutte le altre nostre classi C++ e chiamerò questa torre.
‫Quindi facciamo clic su Crea classe.
‫Quindi ecco la mia nuova età delle torri e Tower Dot.
‫CP Ora la prima cosa di cui abbiamo bisogno è la funzione tick perché la torre vorrà ruotare la
‫sua torretta per affrontare il --.
‫Quindi sovrascriveremo la funzione tick qui.
‫Quindi creerò una nuova sezione pubblica e digiteremo virtual void tick, che prende un float chiamato
‫Delta Time, e questo è un override.
‫Ora entreremo in maggiori dettagli sul virtuale e sull'override nei video futuri, ma essenzialmente stiamo prendendo
‫la funzione tick ereditata e creando una nuova implementazione per essa.
‫Quindi prendiamo la funzione tick e implementiamola qui in Tower CP.
‫Ora dobbiamo anteporre al nome della funzione tick una torre e i due due punti.
‫E come sempre, è una buona idea chiamare super tick e dobbiamo passare il tempo delta.
‫Ora quello che vorrei fare qui è ruotare la torretta del carro armato in modo che la torre minacci il carro armato e
‫sia pronta a sparare proiettili.
‫Ma mi piacerebbe farlo solo se il serbatoio è nel raggio d'azione.
‫Ora, per sapere se il carro armato è nel raggio d'azione, dobbiamo conoscere la distanza dalla torretta al
‫carro armato.
‫Ora, ecco un piccolo aggeggio che rappresenta l'origine del mondo.
‫In altre parole, il punto nello spazio in cui X, Y e Z sono zero.
‫Ora, quando parliamo della posizione di un attore, stiamo parlando del vettore dall'origine a quella
‫posizione.
‫E possiamo sempre ottenere quel vettore di posizione usando la posizione dell'attore in modo da poter ottenere la posizione di una
‫delle torri e la posizione del serbatoio.
‫E se conosciamo queste due posizioni, possiamo calcolare la distanza tra loro.
‫Ora, potremmo farlo con la matematica vettoriale, ma la classe F vector ha una funzione chiamata dist, e questa
‫funzione prende i vettori di posizione e ciò che restituisce è la distanza tra loro.
‫Quindi qui nel file CP della torre, nella funzione tick, scriverò un paio di note solo per sapere
‫cosa dovremmo fare.
‫Per prima cosa, dobbiamo trovare la distanza dal carro armato dopo quel controllo per vedere se il carro armato è nel raggio d'azione
‫e se nel raggio ruota la torretta verso il carro armato.
‫Quindi abbiamo alcune cose da fare qui.
‫Ora, per trovare la distanza dal carro armato, dobbiamo prendere in mano il carro armato.
‫Ora, un buon posto per farlo è in Begin Play.
‫Quindi, oltre alla funzione tick, andiamo avanti e sovrascriviamo Begin Play.
‫Ora nota in Tank H, l'inizio del gioco è in una sezione protetta.
‫Lo terremo protetto anche nella torre.
‫Quindi collocheremo la sezione protetta appena sotto quella pubblica e implementeremo l'inizio del gioco appena sotto il segno di
‫spunta.
‫Quindi andiamo a Tower Dot, CP, implement, inizia a giocare, qualifichiamo completamente il nome della funzione e, come
‫probabilmente avrai intuito, chiamiamo Super Begin Play.
‫Ora per ottenere il serbatoio e memorizzarlo in una variabile, abbiamo bisogno di una variabile di tipo tank.
‫Quindi lo collocheremo qui a Towers H in una sezione privata.
‫Ora questo sarà un tank A, è un puntatore e possiamo semplicemente chiamarlo tank.
‫E per evitare di dover includere Tank H qui, possiamo dichiarare di aver visto quanto può
‫essere importante.
‫Quindi ora abbiamo questo puntatore del serbatoio e se riusciamo a capire come accedere al serbatoio, possiamo memorizzarlo nel nostro puntatore
‫del serbatoio qui e iniziare a giocare.
‫La prima cosa che farò è includere Tank H, in modo che possiamo effettivamente usare il tipo.
‫Allora come accediamo al serbatoio?
‫Bene, ecco la documentazione del motore irreale per una pratica funzione chiamata get player pewn.
‫Esiste in una statica di gioco.
‫Quindi, dal momento che ho questo aperto, andrò avanti e copierò l'inclusione per le statistiche di gioco e
‫darò un'occhiata alla sintassi.
‫Ha due input un oggetto di contesto mondiale.
‫Sappiamo già come gestirlo e un indice giocatore.
‫E come abbiamo visto per i giochi single player come il nostro, l'indice del giocatore sarà sempre giocatore zero
‫e questo ci consentirà di accedere al pedone corrispondente al giocatore zero.
‫Quindi chiamiamo questa funzione qui in Tower Dot CP.
‫Incollerò le statistiche di gioco di inclusione per te e all'inizio del gioco imposterò
‫il serbatoio uguale alle tue statistiche di gioco ottieni giocatore -- per l'oggetto contesto del mondo.
‫Posso passare in questo e per l'indice del giocatore possiamo passare in zero.
‫Ora controlla il rosso ondulato.
‫Dice che un valore di tipo pedone non può essere assegnato a un'entità di tipo A tank.
‫Questo è lo stesso identico problema in cui ci siamo imbattuti quando stavamo tentando di chiamare, ottenere il controller e memorizzare il
‫risultato in un controller del giocatore A.
‫Un tank è figlio di una pedina, quindi non possiamo memorizzare un tipo genitore in un puntatore figlio.
‫Dobbiamo.
‫Hai indovinato, dobbiamo lanciare.
‫Quindi prenderemo il valore restituito da questo e lo inseriremo all'interno di una chiamata di funzione cast.
‫Quindi diremo cast e casting per un tank.
‫E quello che passeremo al cast sarà questa chiamata per ottenere il laghetto dei giocatori.
‫Quindi mettiamolo proprio lì tra parentesi.
‫E dopo il cast avremo accesso al serbatoio.
‫Quindi ora che abbiamo accesso al serbatoio, possiamo trovare la distanza dal serbatoio e una distanza è un galleggiante.
‫Quindi possiamo creare una variabile float locale chiamata distanza.
‫E ciò a cui lo imposteremo uguale è il risultato della chiamata della funzione statica F vettore dist.
‫Ora dist prende due parametri di input di tipo F vettore.
‫Ora vogliamo la distanza tra due punti nello spazio.
‫Uno è la posizione della torre.
‫Siamo nella classe della torre, quindi possiamo chiamare la posizione dell'attore e questo ci dà la posizione della torre.
‫Ma che dire del serbatoio?
‫Possiamo chiamare il carro armato, ottenere la posizione dell'attore e ora abbiamo la distanza.
‫Ora l'unico problema è che stiamo usando il puntatore del serbatoio senza prima verificare che non sia
‫nullo.
‫Quindi dobbiamo prima dire se tank e poi possiamo prendere questa chiamata di funzione e trascinarla proprio qui all'interno
‫dell'istruzione if.
‫Quindi, se il carro armato è valido, possiamo accedere alla sua posizione con la posizione dell'attore.
‫Eccellente.
‫Dato che stiamo lavorando in questa istruzione if, sposterò questi altri commenti qui all'interno di essa perché
‫sappiamo che non possiamo controllare se il tank è nel raggio d'azione, se il tank non è nemmeno valido.
‫Quindi vorrei sfidarvi a ruotare la torretta verso il carro armato.
‫Ora, vogliamo farlo solo se il carro armato è nel raggio d'azione, abbiamo la distanza.
‫Quindi ora abbiamo bisogno di una variabile di portata di fuoco.
‫Quindi crea un galleggiante chiamato poligono di fuoco nella classe torre ed esponilo con la tua proprietà.
‫Ci piacerebbe poterlo modificare dall'editor.
‫Ora controllerai se il serbatoio è nel raggio d'azione.
‫Se si chiama ruota torretta e ruota torretta è necessario dare un'occhiata al bersaglio.
‫Passerai nella posizione dei carri armati.
‫Quindi metti in pausa il video e implementa questo comportamento ora.
‫Bene.
‫Quindi abbiamo bisogno di una variabile di portata di fuoco.
‫Quindi qui nella Torre H, abbiamo una sezione privata.
‫Faremo un galleggiante.
‫Chiamerò questa gamma di fuoco e andrò avanti e la inizializzerò su un valore di, diciamo,
‫300 F.
‫Ma sperimenteremo questo perché sarà una tua proprietà.
‫Quindi tu proprietà.
‫E poiché vorrei che tutti i carri armati avessero la stessa portata di fuoco, farò questo e solo per
‫impostazione predefinita.
‫In questo modo possiamo modificarlo solo sul progetto predefinito.
‫Ora, se hai fatto la tua modifica ovunque o forse hai modificato solo l'istanza, va benissimo.
‫È davvero una questione di preferenze e possiamo cambiarla in seguito.
‫Gli darò anche una categoria e chiamerò questa categoria combattimento.
‫Entriamo in Tower CP e abbiamo questo punto successivo qui.
‫Controlla se il carro è nel raggio d'azione, il che significa che dobbiamo controllare se la distanza è inferiore
‫o uguale al raggio di tiro.
‫Abbiamo minore o uguale a e non solo uguale a, perché da un fotogramma all'altro, la distanza può effettivamente
‫essere maggiore del raggio di tiro, un fotogramma e inferiore al raggio di tiro del fotogramma successivo che passa completamente il raggio
‫di tiro.
‫Quindi potrebbe in realtà non diventare mai esattamente uguale alla portata di fuoco.
‫In effetti, con valori in virgola mobile, due float esattamente uguali sono piuttosto rari.
‫Quindi abbiamo questo se check e se arriviamo all'interno di esso, significa che la distanza è inferiore o uguale alla
‫portata di fuoco.
‫Il serbatoio ora è nel raggio d'azione, il che significa che questo commento può essere spostato proprio lì.
‫Ora, se nel raggio d'azione, ruota la torretta verso il carro armato, ciò significa che chiameremo la funzione di rotazione
‫della torretta.
‫Questa è la nostra funzione protetta che abbiamo inserito nel pod di base.
‫Ora ruota la torretta dà un'occhiata al bersaglio e abbiamo bisogno della posizione del carro armato.
‫Quindi sarà il serbatoio per ottenere la posizione dell'attore.
‫E con questo ora chiamiamo rotazione torretta solo se il carro armato è nel raggio d'azione.
‫Quindi compiliamo questo e vediamo come funziona.
‫Quindi siamo tornati qui nell'editor e quello che dobbiamo fare è entrare nei progetti, nei pedoni e trovare una torretta
‫dei pedoni BP e aprire l'editor completo del progetto.
‫Ora in alto a destra, vediamo il pedone di base della classe genitore, ma vogliamo che la nostra classe madre sia la torre
‫in modo da poter andare alle impostazioni della classe, classe genitore e cercare la torre e selezionarla.
‫Ora la nostra torretta dei pedoni è basata sulla classe torre.
‫Ora vediamo cosa succede quando premiamo play.
‫Ok, quindi sto spostando il serbatoio.
‫Non siamo nel raggio d'azione, quindi non vediamo alcun movimento dalle torri.
‫Ma se entro nel raggio d'azione, guarda quello.
‫Ora mi stanno seguendo in giro e sembra piuttosto minaccioso.
‫Ora 300 unità non sono così lontane.
‫Quindi quello che mi piacerebbe fare è modificare quella distanza.
‫Quindi da qui in BP Pawn Turret, selezionerò BP Pond Turret self.
‫Ed ecco la sezione del combattimento.
‫Ho intenzione di andare avanti e impostare questo a circa 700.
‫Ora, se premo play, vedrò che non ruoteranno mentre torno qui.
‫Ma appena entro nel raggio d'azione, ora mi guardano.
‫Perfetto.
‫Quindi, in sintesi, abbiamo creato la classe tower.
‫Ora abbiamo un nemico per il carro armato.
‫Abbiamo anche ruotato la torretta della torre verso il carro armato nella funzione tick e lo faremo solo se il carro armato si
‫trova nel raggio di tiro.
‫Abbiamo anche esposto la variabile del raggio di fuoco in modo che possa essere regolata nel progetto.
‫Siamo quasi pronti per il combattimento.
‫Inizieremo a configurarlo nei video a venire.
‫Ci vediamo presto.