‫Ehi.
‫Ben tornato.
‫Siamo pronti per finire il nostro gioco, il che significa che ci sono solo poche cose da fare per perfezionare
‫il nostro gioco e portarlo in uno stato di cui siamo felici.
‫Quindi preparati a finire questo gioco.
‫Abbiamo quasi finito.
‫Aggiungeremo solo un paio di funzionalità.
‫Vorrei rendere il movimento della telecamera un po' più fluido, quindi inizieremo con quello.
‫Ho anche notato che le torri sparano ancora proiettili dopo la morte del carro armato, quindi possiamo correggere
‫facilmente il codice per evitare che ciò accada.
‫Inoltre, visiterò un potenziale problema con il punto di spawn del proiettile.
‫Quindi entriamo e rifiniamo questo gioco.
‫Ora, la prima cosa che vorrei guardare è il movimento della telecamera.
‫Quindi, se vado avanti e premo play, ti mostrerò solo cosa intendo.
‫Mentre mi muovo, vedrai che la telecamera segue esattamente il nostro movimento mentre ci giriamo e
‫mentre ci muoviamo avanti e indietro, la telecamera segue automaticamente.
‫Ora, c'è un bel trucco che possiamo aggiungere a questa fotocamera che può renderla un po' più fluida.
‫Andiamo avanti e apriamo il serbatoio dello stagno BP.
‫Ora qui in BP Pond Tank, selezionerò il nostro componente del braccio a molla.
‫E se cerco il ritardo della fotocamera, vedrò qui nella sezione del ritardo, c'è questa casella di controllo per abilitare il ritardo
‫della fotocamera.
‫Lo controllerò e abiliterò il ritardo di rotazione della fotocamera.
‫Verificherò anche quello.
‫Ora, questo ci consente di mantenere la fotocamera in ritardo e recuperare senza problemi, il che crea una bella
‫sorta di effetto fotocamera professionale.
‫Andiamo avanti e premiamo play e testiamo questo.
‫Quindi nota mentre mi muovo, la telecamera impiega un breve lasso di tempo per recuperare il ritardo mentre ci muoviamo.
‫E lo stesso vale per quando stiamo ruotando.
‫Quindi è come se ci fosse un po' di inerzia e la telecamera si trova su una specie di binario scorrevole e rallenta fino
‫a fermarsi.
‫Ora possiamo selezionare il braccio a molla e possiamo cambiare la velocità del ritardo della fotocamera e la velocità del ritardo di rotazione.
‫Quindi, ad esempio, se lo metto a un valore inferiore, diciamo cinque e cinque anziché dieci, ora diamo un'occhiata
‫a come appare.
‫Quindi mi sto muovendo e vedrai che la telecamera ha un po' più di ritardo.
‫Ora, possiamo aumentare o diminuire questo come riteniamo opportuno.
‫Questo è qualcosa con cui puoi sperimentare e in qualche modo trovare i valori che funzionano per te.
‫Qui abbiamo un valore di due e per me è un po' troppo ritardo.
‫Quindi penso che qualcosa tra cinque e due funzionerebbe per me.
‫Se ti piace questo tipo di valore, forse lo manterrai a due o forse anche più basso.
‫Ma lo metterò a un valore di, diciamo, quattro per la velocità di ritardo della fotocamera e quattro per la velocità di ritardo di rotazione
‫della fotocamera.
‫Diamo un'occhiata a come appare.
‫Quindi, mentre mi muovo, la telecamera è in ritardo.
‫C'è chiaramente un po' di ritardo della fotocamera, ma non è troppo.
‫Penso che in realtà sia abbastanza buono, quindi sono abbastanza soddisfatto.
‫Il nostro prossimo oggetto è la torre che spara dopo che il carro armato è già morto.
‫Lasciami andare avanti e mostrarti cosa intendo.
‫Eccoci.
‫Il carro è morto e le torri continuano a sparare.
‫Ora, questo è perché il serbatoio esiste ancora.
‫E finché è nel raggio di tiro, le torri continueranno a sparare.
‫Questo è facilmente gestibile avendo una sorta di variabile che possiamo controllare per vedere se il serbatoio è morto.
‫Quindi entrerò nella classe tank qui e tank, e aggiungerò una variabile booleana che possiamo controllare per
‫vedere se il tank è ancora vivo.
‫E lo renderò pubblico poiché prevediamo di accedervi dall'esterno della classe.
‫Quindi farò di questa una variabile toro chiamata Be Alive e la imposterò uguale a true per impostazione
‫predefinita.
‫Quindi il carro armato partirà nello stato vivo e poi quando il carro muore, vivo sarà impostato su falso.
‫E questo può accadere nel serbatoio CP durante la distruzione del manico.
‫Quindi andiamo a gestire la distruzione qui.
‫E dopo aver impostato queste altre proprietà, imposterò B vivo uguale a falso.
‫Quindi, poiché stiamo impostando B in vita su false, possiamo sapere se il carro armato è morto e quindi possiamo
‫semplicemente impedire di sparare i proiettili controllando questo booleano.
‫Quindi entriamo in Tower Dot, CP e qui per controllare le condizioni di fuoco.
‫Possiamo assicurarci che il carro armato sia ancora vivo prima di sparare.
‫Quindi prima vedrò se il serbatoio è valido.
‫Dirò che se tank è uguale a null pointer, tornerò semplicemente in anticipo.
‫In questo modo sappiamo che Tank sarà valido e quindi nel nostro controllo per vedere se siamo nel
‫raggio di tiro, aggiungerò un e vedrò se Tank è vivo.
‫Se serbatoio.
‫È vivo, quindi possiamo sparare.
‫Se Tank non è vivo, non spareremo.
‫Ora, ti starai chiedendo se sia una buona idea mettere il ritorno su una sola riga come mi hai
‫visto fare nei video precedenti.
‫E questa è una buona opportunità per discutere di Unreal Engine, migliori pratiche di programmazione e raccomandazioni.
‫Le pratiche di codifica del motore irreale consigliano di avere parentesi graffe con un corpo per tutte le tue istruzioni if,
‫anche quelle che hanno una singola istruzione.
‫E il motivo è perché se prevedi di aggiungere più righe di codice a questo, hai già il
‫corpo qui.
‫Ed è anche più chiaro.
‫E questo mi porta anche ad un altro punto, che è il mio uso dell'auto.
‫Ho usato auto qui nella classe proiettile un paio di volte e, sebbene possa essere efficiente, a prima
‫vista non è così ovvio quali siano i tipi, motivo per cui l'uso di auto non è raccomandato anche nelle pratiche
‫di codifica del motore irreale.
‫Se desideri attenerti alle pratiche di codifica consigliate da Unreal Engine, puoi sostituire queste istanze di
‫auto con il tipo effettivo.
‫Ad esempio, qui, get instigator controller restituisce un controller A in modo che possiamo cambiarlo in un controller e questo
‫è un puntatore.
‫Questa classe statica di tipo danno restituisce una classe U in modo da poter usare la tua classe qui e ovviamente
‫ottenere il proprietario qui restituisce un attore quindi potremmo usare un attore invece di auto qui e ora se guardi questo codice,
‫è molto più ovvio quali siano questi tipi, mentre auto maschera semplicemente tutto e ti consente di
‫essere pigro e farla franca senza digitare i tipi.
‫Ora a volte non sono sicuro di cosa restituisca una grande espressione, quindi userò auto solo per vedere qual
‫è quel tipo e poi lo sostituirò con il tipo effettivo.
‫Quindi questo è un altro modo in cui puoi usare auto per aiutarti a imparare i tipi restituiti da espressioni lunghe e complicate
‫come questa.
‫Quindi, poiché siamo nelle fasi di rifinitura, sostituirò auto con i nomi dei tipi effettivi
‫qui in proiettile.
‫Entrerò anche nel pedone di base nella funzione di fuoco in cui abbiamo questo proiettile e questo viene restituito
‫da questa grande espressione lunga qui.
‫L'attore Spawn in questo caso restituirà un proiettile, quindi posso sostituirlo con un proiettile.
‫Bene.
‫Quindi questo migliorerà il codice sul lato C++.
‫Andiamo avanti e compiliamo questo.
‫E con una compilazione di successo, torniamo all'editor e premiamo play e assicuriamoci che
‫quelle torri smettano di spararci addosso dopo che siamo morti.
‫Quindi c'è un colpo.
‫Ce n'è un altro, e io sto aspettando, e non vedo più proiettili.
‫Perfetto.
‫Bene.
‫Quindi l'ultimo punto che vorrei trattare prima di concludere questo è il punto di spawn del proiettile.
‫Ora, selezioniamolo qui in BP Pond Tank e assicuriamoci che sia abbastanza distante dal
‫barile.
‫Prima di farlo, lo posizionerò davvero, molto vicino e ti mostrerò alcuni problemi che
‫potrebbero potenzialmente sorgere.
‫Ora, mentre vado avanti e faccio clic con il pulsante sinistro del mouse, vedrai che non vedo il proiettile.
‫In effetti, non lo vedo affatto perché è semplicemente troppo vicino.
‫Stiamo già avendo una collisione.
‫Viene distrutto prima che possa fare qualsiasi cosa.
‫Quindi assicurati che sia molto lontano dalla canna.
‫Stiamo comunque generando del fumo, quindi sembrerà che dietro di esso sembrerà una scia di fumo.
‫Quindi questo sembrerà ancora abbastanza realistico.
‫Quindi sembra abbastanza buono.
‫E mentre siamo sui punti di spawn dei proiettili, potrebbe essere una buona idea andare a guardare la torretta dello stagno BP
‫e selezionare il suo punto di spawn dei proiettili.
‫E se hai avuto problemi a generare proiettili dalla torretta,
‫potresti voler assicurarti che sia anche a una buona distanza dalla canna della torretta.
‫Quindi ci siamo.
‫Abbiamo un gioco funzionale e sembra fantastico.
‫Abbiamo la capacità di girare per il mondo, abbiamo la capacità di sparare proiettili e loro fanno
‫esplodere le cose.
‫Se colpiamo una torre, possiamo distruggerla.
‫Se la torre ci colpisce, può distruggerci.
‫Proprio così.
‫E abbiamo condizioni di vittoria e di sconfitta con i widget HUD che vengono visualizzati sullo schermo e ci dicono se
‫abbiamo vinto o perso la partita.
‫Quindi questo è fantastico.
‫E se desideri impacchettare questo gioco, puoi farlo facilmente salendo in alto e facendo
‫clic sull'icona della piattaforma sia per Windows, se sei su una macchina Windows, sia per iOS, se stai usando
‫un mac macchina, quindi ovviamente hai queste altre opzioni.
‫Se desideri creare pacchetti per altre piattaforme, ti consiglio di fare qualche ricerca online per cercare le diverse
‫piattaforme e come creare pacchetti per loro.
‫Sono su una macchina Windows, quindi posso semplicemente fare clic sul progetto del pacchetto per Windows qui e mi
‫chiederà dove vorrei impacchettare il mio gioco.
‫Ora ho il mio progetto qui in Tune Tanks.
‫Farò clic con il pulsante destro del mouse, creerò una nuova cartella e chiamerò semplicemente questa build.
‫In genere è lì che inseriresti un progetto in pacchetto.
‫Quindi selezionerò quella cartella e consentirò a Unreal Engine di impacchettare il mio gioco.
‫Probabilmente ci vorranno alcuni minuti e una volta terminato, dovrei avere un gioco confezionato.
‫Bene.
‫Quindi, una volta terminato il confezionamento, dovremmo vedere la compilazione riuscita nel registro di output e quindi possiamo cercare
‫nella cartella che abbiamo designato per il nostro progetto in pacchetto.
‫Per me, sarà questa cartella di build.
‫Ora ho impacchettato quattro finestre, quindi ho una cartella Windows ed ecco i miei carri armati, punto xy.
‫È un eseguibile.
‫Posso fare doppio clic su di esso ed ecco il mio progetto finale.
‫posso sparare.
‫posso schivare.
‫Sembra che le mie torri nemiche possano spararmi e io posso distruggerle.
‫Sì, posso distruggerli.
‫Possono distruggermi, a quanto pare, e posso perdere la partita.
‫E ovviamente, se fossi stato un po' più abile, avrei potuto vincere la partita.
‫E per la tua sfida finale, ti incaricherò di aggiungere il tuo sapore al gioco.
‫Fai tuo questo gioco.
‫Trova nuovi suoni, effetti o mesh e crea torri e carri armati dall'aspetto originale.
‫Aggiungi più torri, magari aggiungi diversi livelli di abilità, rendi le torri sempre più difficili man mano che
‫avanzi nel livello.
‫Magari fai salire di livello il carro armato, dargli un livello che puoi aumentare man mano che distruggi sempre più torri.
‫Forse puoi aggiungere una nuova geometria di livello e far salire il carro sulle rampe e provare a distruggere i carri armati in
‫aree difficili da raggiungere.
‫Le possibilità sono infinite, ma soprattutto divertiti.
‫Mentre sviluppi i tuoi giochi.
‫Non metterai in pausa il video per questa sfida.
‫Questo sarà qualcosa che puoi fare da questo momento in poi con i tuoi progetti di gioco.
‫Quindi congratulazioni.
‫Abbiamo finito il nostro gioco.
‫Spero che questa sezione ti sia piaciuta.
‫Mi sono divertito un sacco.
‫Questo è un grande progetto di gioco e hai fatto molta strada.
‫Hai imparato un sacco di abilità in questa sezione del corso, quindi spero che tu sia pronto per
‫passare a cose più eccitanti.
‫Grazie mille.
‫Sono Steven e ci vediamo presto.