‫Ciao e bentornato.
‫Ora, abbiamo già creato la nostra classe di proiettili e siamo pronti per iniziare a generare queste
‫cose nel livello in modo da poterle lanciare contro le torri ed eventualmente distruggerle.
‫Ora, la generazione degli attori coinvolgerà la funzione dell'attore di generazione.
‫Quindi impareremo come funziona in questo video.
‫Ora, parliamo della generazione del proiettile.
‫Questo è qualcosa che vorremmo fare dal lato C++ delle cose.
‫Chiameremo funzioni C++ per creare nuovi oggetti in modo dinamico nel mondo.
‫Ora stiamo generando dal lato C++ delle cose, ma vorremmo generare un oggetto basato sul progetto della
‫nostra classe proiettile.
‫Il motivo è perché abbiamo un progetto basato sulla classe A Projectile C++, che contiene
‫informazioni aggiuntive.
‫In particolare, ha quel set di proprietà mesh.
‫Abbiamo scelto la mesh per il nostro componente mesh statico.
‫Quindi non possiamo semplicemente generare la versione C++.
‫Dobbiamo generare la versione del progetto per ottenere quella mesh.
‫Quindi la domanda è: come si genera un oggetto in C++, che si basa su un progetto?
‫Bene, impareremo qualcosa chiamato PT Subclass di ora questo è un modello.
‫E come molti modelli, le parentesi angolari richiederanno un tipo.
‫Quindi l'utilizzo della sottoclasse PT di richiede un parametro di tipo.
‫E questo ci permette di avere una variabile che memorizza qualcosa chiamato classe U.
‫La classe U rappresenta un tipo di classe, ma ha anche la capacità di interagire con il sistema di riflessione del
‫motore irreale.
‫Quando dico riflessione, intendo lo scambio di informazioni tra il C++ e il lato del progetto.
‫La sottoclasse PT di, come suggerisce il nome, ci consente di memorizzare una variabile che rappresenta una classe basata sul
‫tipo che stiamo passando o una sottoclasse di questo tipo scelto.
‫Ciò significa che possiamo scegliere un tipo e una sottoclasse t di può contenere una classe u che rappresenta quel tipo o qualsiasi
‫tipo derivato da esso.
‫E questo include progetti basati sul tipo.
‫Quindi vediamo come funziona questa sottoclasse t di cose.
‫Bene.
‫Quindi sono tornato qui in base pom e il motivo per cui sono in base pod è perché vogliamo che questo proiettile
‫sia sia sulla classe tank che su quella tower.
‫Entrambe queste classi genereranno proiettili.
‫Quindi vorrei una sottoclasse t di variabile qui.
‫Quindi dirò t sottoclasse di e tra parentesi angolari dobbiamo passare in un tipo.
‫Ora possiamo dichiarare in avanti anche all'interno di parentesi angolari come questa.
‫E farò del tipo un proiettile.
‫E il motivo è perché abbiamo creato la classe proiettile e il suo tipo è un proiettile.
‫Quindi creerò questa variabile e la chiamerò classe proiettile.
‫Ora, questo ci consentirà di avere una variabile C++ che rappresenta un tipo di classe e il tipo può essere
‫basato su un proiettile, anche un tipo di classe blueprint basato su questo.
‫Ora gli darò una proprietà U.
‫E poiché mi piacerebbe essere in grado di modificarlo, almeno nel progetto predefinito, renderò
‫questa modifica predefinita.
‫Solo ora possiamo dare a questo una categoria.
‫Lo metterò in una categoria chiamata combattimento.
‫Ora andiamo avanti e compiliamo questo.
‫Ok, quindi sono tornato nell'editor e andrò nella cartella dei progetti e da lì
‫nella cartella Pons.
‫E ho intenzione di aprire BP -- tank e aprire l'editor completo del progetto.
‫Ora, se guardo nel pannello dei dettagli, posso cercare il combattimento.
‫Ecco qui.
‫Ed ecco la variabile di classe del proiettile.
‫Questa è quella sottoclasse di quella che abbiamo chiamato classe proiettile.
‫Ora nota che possiamo impostarlo qui e possiamo impostarlo usando un menu a discesa.
‫E se facciamo clic sul menu a discesa, abbiamo tre opzioni.
‫Possiamo impostarlo su nessuno, che è quello su cui è impostato per impostazione predefinita, il che in pratica significa che è un puntatore nullo.
‫Oppure possiamo impostarlo su proiettile o proiettile BP.
‫Questo è ciò che la sottoclasse di ci consente di fare è impostare questa classe di proiettili su un tipo particolare basato sul
‫proiettile, poiché questo è il tipo che abbiamo scelto quando abbiamo creato la variabile.
‫Ora proiettile qui.
‫Questa è la classe C++ chiamata proiettile in C++.
‫È un proiettile, ma il proiettile BP è un progetto basato sulla classe del proiettile C++ e possiamo scegliere
‫questo.
‫E ora la classe del proiettile è impostata sul tipo di proiettile BP.
‫Ora, questo non è un componente e non è un oggetto proiettile BP.
‫Non è quello che è.
‫Memorizza un tipo, più specificamente una U.
‫Tipo di classe.
‫E come ho detto, la tua classe ha funzionalità integrate che consentono alla riflessione di funzionare tra C++ e
‫blueprint.
‫Le informazioni possono fluire tra C++ e blueprint.
‫Quindi ora abbiamo la classe del proiettile, una sottoclasse PT impostata sul tipo di progetto del proiettile BP.
‫Allora perché affrontare tutti i problemi per creare una sottoclasse di variabile?
‫Bene, dobbiamo discutere di come funziona la funzione dell'attore di spawn.
‫Spawn attore è una funzione appartenente alla nuova classe mondiale.
‫Quindi, se riusciamo a controllare il mondo, possiamo chiamare Spawn attore.
‫E l'attore Spawn è un'altra funzione del modello ed è progettato per creare nuovi oggetti simili alla creazione di
‫oggetti secondari predefiniti.
‫Ma la creazione di un oggetto secondario predefinito è progettata per la creazione di componenti e possiamo usarla solo nel costruttore
‫per una particolare classe, l'attore di spawn può essere chiamato in fase di esecuzione mentre il gioco è in esecuzione e può
‫creare attori.
‫Ora è un modello, quindi richiede un tipo.
‫Se vogliamo generare un proiettile, allora passeremmo nella classe C++ digitando qui un proiettile.
‫Questa è la classe C++ che viene restituita dalla funzione spawn attore in C++.
‫Ora le parentesi accettano un certo numero di parametri, inclusa una classe U.
‫Ora ci sono più sovraccarichi di questa funzione che accettano parametri di input diversi.
‫La più semplice forse è la versione che richiede una classe U, una posizione A e una rotazione.
‫L'U.
‫La classe è ciò che rappresenta il tipo da generare.
‫Questo è il tipo effettivo dell'oggetto che viene generato.
‫Questa potrebbe essere una classe di progetto.
‫La posizione è un vettore F che specifica dove generare l'oggetto e la rotazione ne specificherà la rotazione.
‫Quindi un esempio della sintassi è simile a questo.
‫Chiameremmo spawn attore specificando il tipo di classe e quindi passando le informazioni sulla classe u insieme al
‫vettore di posizione e al rotatore di rotazione.
‫Quindi parliamo della tua classe per un secondo.
‫Ora, come abbiamo detto, la tua classe rappresenta un tipo di classe.
‫Quando chiamiamo Spawn attore, passiamo a una classe U per fornire alla funzione spawn attore
‫informazioni sull'oggetto da spawn.
‫Sì, abbiamo passato un tipo tra parentesi angolari, ma questo dice semplicemente all'attore Spawn il tipo C++ da
‫creare.
‫Mentre la tua classe contiene più informazioni.
‫Diciamo che abbiamo creato un progetto basato su un proiettile e nel progetto abbiamo impostato alcune proprietà come
‫la scelta della mesh statica per il componente mesh statico.
‫Ora, se dovessimo semplicemente generare una classe C++ grezza, quella mesh statica non verrà impostata sull'oggetto
‫proiettile appena generato.
‫In sostanza, stiamo solo generando un nuovo attore invisibile.
‫Tuttavia, una nuova variabile di classe può rappresentare una classe blueprint.
‫La tua classe ci dà la possibilità di avere una variabile sul lato C++, che rappresenta un progetto, un tipo
‫di classe e uno spawn.
‫L'attore può prendere quella classe come argomento di input in modo che possa generare un nuovo oggetto basato sul progetto
‫rappresentato da quella nuova classe.
‫Quindi un nuovo proiettile avrà la sua proprietà mesh statica impostata perché stiamo generando un nuovo oggetto
‫basato sul progetto e non sulla classe C++ grezza.
‫Questo è il motivo per cui abbiamo creato la nostra sottoclasse perché può memorizzare una nuova classe e siamo stati
‫in grado di impostarla uguale al proiettile BP dal nostro progetto BP - serbatoio.
‫Quindi ora sai come generare attori.
‫L'attore Spawn appartiene alla nuova classe mondiale.
‫Quindi, se chiami get world e chiami semplicemente Spawn attore, allora conosci i requisiti di
‫input per questa funzione che passi nel tipo C++ tra parentesi angolari e classifichi una posizione e una
‫rotazione tra parentesi.
‫Quindi, per la tua sfida, genererai il proiettile, fallo nella funzione di fuoco.
‫Quindi chiama l'attore di spawn del mondo e passa in un proiettile tra parentesi angolari.
‫Ciò significa che dovrai includere il file di intestazione per il proiettile.
‫Quindi non dimenticarlo e usa la nostra nuova classe proiettile variabile come parametro di input della classe U tra
‫parentesi.
‫Ora abbiamo bisogno di una posizione e di una rotazione.
‫Utilizzerai il punto di spawn del proiettile sia per la posizione che per la rotazione.
‫Dal componente del punto di spawn del proiettile.
‫È possibile chiamare get Component Location e ottenere la rotazione dei componenti per accedere a questi valori.
‫Quindi metti in pausa il video e chiama ora l'attore di spawn nella funzione di fuoco.
‫Bene.
‫Quindi entriamo in Base Pond CP dove abbiamo definito la funzione di fuoco.
‫Ora abbiamo disegnare la sfera di debug qui.
‫Non ne avremo davvero più bisogno.
‫Quindi eliminerò questa chiamata di funzione e invece chiamerò l'attore Spawn qui.
‫Ora abbiamo già la posizione del punto di spawn del proiettile.
‫Rinominerò questa variabile locale semplicemente in posizione e creerò un nuovo rotatore F.
‫Chiamato rotazione.
‫E questo lo otterrò anche dal punto di spawn del proiettile.
‫Quindi sarà il punto di spawn del proiettile a ottenere la rotazione dei componenti.
‫Quindi ora ho la posizione e la rotazione in cui generare il proiettile.
‫Quindi dopo devo chiamare l'attore spawn in modo da poter chiamare get world.
‫E dal mondo che ottengo da questa funzione, posso chiamare spawn attore.
‫Ora questo ha parentesi angolari e parentesi, giusto?
‫Quindi tra parentesi angolari, devo usare un proiettile.
‫E poiché stiamo usando un proiettile, dobbiamo includere l'intestazione per quello.
‫Quindi qui sopra, rimuoverò, disegnerò gli helper di debug e lo sostituirò con proiettile.
‫Quindi ora abbiamo incluso quel tipo.
‫Ora abbiamo bisogno della classe U e in base a H ha una classe di proiettili, possiamo usarla come classe U.
‫Quindi passeremo in classe di proiettili.
‫Ora, finalmente, possiamo passare in posizione e rotazione e questo soddisferà la funzione dell'attore di spawn.
‫Quindi andiamo avanti e compiliamo questo e torniamo qui nell'editor e possiamo testare il gioco.
‫Quindi andrò avanti e farò clic e verificherò.
‫Abbiamo generato un nuovo proiettile.
‫Stiamo generando il proiettile sulla punta della nostra canna e loro si librano semplicemente nell'aria, il che non
‫sembra proprio a posto.
‫Ma va bene.
‫Questo è il primo passo.
‫Per prima cosa dobbiamo generare il proiettile, facendo in modo che si comporti come un proiettile come passaggio successivo.
‫Quindi, in sintesi, ora stiamo generando proiettili.
‫Questo è un grande traguardo.
‫Tuttavia, non sono ancora dei proiettili.
‫Si librano semplicemente lì e i proiettili dovrebbero volare nell'aria.
‫Quindi nel prossimo video parleremo di come far volare i nostri proiettili nell'aria in
‫modo che si comportino come proiettili.
‫Ci vediamo presto.