﻿1
00:00:04,380 --> 00:00:04,920
‫Ehi.

2
00:00:04,920 --> 00:00:05,810
‫Ben tornato.

3
00:00:05,820 --> 00:00:11,610
‫Siamo pronti per finire il nostro gioco, il che significa che ci sono solo poche cose da fare per perfezionare

4
00:00:11,610 --> 00:00:15,150
‫il nostro gioco e portarlo in uno stato di cui siamo felici.

5
00:00:15,150 --> 00:00:17,730
‫Quindi preparati a finire questo gioco.

6
00:00:17,730 --> 00:00:19,170
‫Abbiamo quasi finito.

7
00:00:19,170 --> 00:00:21,450
‫Aggiungeremo solo un paio di funzionalità.

8
00:00:21,450 --> 00:00:25,980
‫Vorrei rendere il movimento della telecamera un po' più fluido, quindi inizieremo con quello.

9
00:00:26,010 --> 00:00:32,130
‫Ho anche notato che le torri sparano ancora proiettili dopo la morte del carro armato, quindi possiamo correggere

10
00:00:32,130 --> 00:00:35,250
‫facilmente il codice per evitare che ciò accada.

11
00:00:35,250 --> 00:00:40,410
‫Inoltre, visiterò un potenziale problema con il punto di spawn del proiettile.

12
00:00:40,410 --> 00:00:43,380
‫Quindi entriamo e rifiniamo questo gioco.

13
00:00:43,740 --> 00:00:46,920
‫Ora, la prima cosa che vorrei guardare è il movimento della telecamera.

14
00:00:46,920 --> 00:00:50,670
‫Quindi, se vado avanti e premo play, ti mostrerò solo cosa intendo.

15
00:00:50,820 --> 00:00:58,380
‫Mentre mi muovo, vedrai che la telecamera segue esattamente il nostro movimento mentre ci giriamo e

16
00:00:58,380 --> 00:01:03,210
‫mentre ci muoviamo avanti e indietro, la telecamera segue automaticamente.

17
00:01:03,210 --> 00:01:08,850
‫Ora, c'è un bel trucco che possiamo aggiungere a questa fotocamera che può renderla un po' più fluida.

18
00:01:08,850 --> 00:01:11,730
‫Andiamo avanti e apriamo il serbatoio dello stagno BP.

19
00:01:11,940 --> 00:01:16,830
‫Ora qui in BP Pond Tank, selezionerò il nostro componente del braccio a molla.

20
00:01:16,830 --> 00:01:23,580
‫E se cerco il ritardo della fotocamera, vedrò qui nella sezione del ritardo, c'è questa casella di controllo per abilitare il ritardo

21
00:01:23,580 --> 00:01:24,360
‫della fotocamera.

22
00:01:24,390 --> 00:01:28,440
‫Lo controllerò e abiliterò il ritardo di rotazione della fotocamera.

23
00:01:28,470 --> 00:01:30,240
‫Verificherò anche quello.

24
00:01:30,240 --> 00:01:37,590
‫Ora, questo ci consente di mantenere la fotocamera in ritardo e recuperare senza problemi, il che crea una bella

25
00:01:37,590 --> 00:01:39,780
‫sorta di effetto fotocamera professionale.

26
00:01:39,780 --> 00:01:42,810
‫Andiamo avanti e premiamo play e testiamo questo.

27
00:01:42,810 --> 00:01:50,490
‫Quindi nota mentre mi muovo, la telecamera impiega un breve lasso di tempo per recuperare il ritardo mentre ci muoviamo.

28
00:01:50,490 --> 00:01:53,190
‫E lo stesso vale per quando stiamo ruotando.

29
00:01:53,190 --> 00:01:59,970
‫Quindi è come se ci fosse un po' di inerzia e la telecamera si trova su una specie di binario scorrevole e rallenta fino

30
00:01:59,970 --> 00:02:00,840
‫a fermarsi.

31
00:02:00,840 --> 00:02:07,710
‫Ora possiamo selezionare il braccio a molla e possiamo cambiare la velocità del ritardo della fotocamera e la velocità del ritardo di rotazione.

32
00:02:07,710 --> 00:02:15,300
‫Quindi, ad esempio, se lo metto a un valore inferiore, diciamo cinque e cinque anziché dieci, ora diamo un'occhiata

33
00:02:15,300 --> 00:02:16,950
‫a come appare.

34
00:02:17,040 --> 00:02:21,450
‫Quindi mi sto muovendo e vedrai che la telecamera ha un po' più di ritardo.

35
00:02:21,450 --> 00:02:25,170
‫Ora, possiamo aumentare o diminuire questo come riteniamo opportuno.

36
00:02:25,170 --> 00:02:31,170
‫Questo è qualcosa con cui puoi sperimentare e in qualche modo trovare i valori che funzionano per te.

37
00:02:31,200 --> 00:02:36,930
‫Qui abbiamo un valore di due e per me è un po' troppo ritardo.

38
00:02:36,930 --> 00:02:41,100
‫Quindi penso che qualcosa tra cinque e due funzionerebbe per me.

39
00:02:41,100 --> 00:02:46,290
‫Se ti piace questo tipo di valore, forse lo manterrai a due o forse anche più basso.

40
00:02:46,290 --> 00:02:54,360
‫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

41
00:02:54,360 --> 00:02:55,320
‫della fotocamera.

42
00:02:55,350 --> 00:02:57,270
‫Diamo un'occhiata a come appare.

43
00:02:57,270 --> 00:02:59,850
‫Quindi, mentre mi muovo, la telecamera è in ritardo.

44
00:02:59,850 --> 00:03:03,660
‫C'è chiaramente un po' di ritardo della fotocamera, ma non è troppo.

45
00:03:03,660 --> 00:03:09,660
‫Penso che in realtà sia abbastanza buono, quindi sono abbastanza soddisfatto.

46
00:03:10,320 --> 00:03:15,960
‫Il nostro prossimo oggetto è la torre che spara dopo che il carro armato è già morto.

47
00:03:15,960 --> 00:03:18,930
‫Lasciami andare avanti e mostrarti cosa intendo.

48
00:03:19,020 --> 00:03:19,740
‫Eccoci.

49
00:03:19,740 --> 00:03:23,880
‫Il carro è morto e le torri continuano a sparare.

50
00:03:23,970 --> 00:03:26,970
‫Ora, questo è perché il serbatoio esiste ancora.

51
00:03:26,970 --> 00:03:31,290
‫E finché è nel raggio di tiro, le torri continueranno a sparare.

52
00:03:31,290 --> 00:03:38,130
‫Questo è facilmente gestibile avendo una sorta di variabile che possiamo controllare per vedere se il serbatoio è morto.

53
00:03:38,520 --> 00:03:45,690
‫Quindi entrerò nella classe tank qui e tank, e aggiungerò una variabile booleana che possiamo controllare per

54
00:03:45,690 --> 00:03:48,690
‫vedere se il tank è ancora vivo.

55
00:03:48,690 --> 00:03:53,580
‫E lo renderò pubblico poiché prevediamo di accedervi dall'esterno della classe.

56
00:03:53,580 --> 00:04:00,690
‫Quindi farò di questa una variabile toro chiamata Be Alive e la imposterò uguale a true per impostazione

57
00:04:00,690 --> 00:04:01,500
‫predefinita.

58
00:04:01,500 --> 00:04:09,270
‫Quindi il carro armato partirà nello stato vivo e poi quando il carro muore, vivo sarà impostato su falso.

59
00:04:09,270 --> 00:04:14,130
‫E questo può accadere nel serbatoio CP durante la distruzione del manico.

60
00:04:14,130 --> 00:04:16,530
‫Quindi andiamo a gestire la distruzione qui.

61
00:04:16,530 --> 00:04:23,070
‫E dopo aver impostato queste altre proprietà, imposterò B vivo uguale a falso.

62
00:04:23,190 --> 00:04:29,730
‫Quindi, poiché stiamo impostando B in vita su false, possiamo sapere se il carro armato è morto e quindi possiamo

63
00:04:29,730 --> 00:04:33,120
‫semplicemente impedire di sparare i proiettili controllando questo booleano.

64
00:04:33,120 --> 00:04:38,790
‫Quindi entriamo in Tower Dot, CP e qui per controllare le condizioni di fuoco.

65
00:04:38,790 --> 00:04:42,990
‫Possiamo assicurarci che il carro armato sia ancora vivo prima di sparare.

66
00:04:42,990 --> 00:04:46,290
‫Quindi prima vedrò se il serbatoio è valido.

67
00:04:46,290 --> 00:04:52,560
‫Dirò che se tank è uguale a null pointer, tornerò semplicemente in anticipo.

68
00:04:52,560 --> 00:04:59,010
‫In questo modo sappiamo che Tank sarà valido e quindi nel nostro controllo per vedere se siamo nel

69
00:04:59,010 --> 00:05:03,420
‫raggio di tiro, aggiungerò un e vedrò se Tank è vivo.

70
00:05:03,450 --> 00:05:03,870
‫Se serbatoio.

71
00:05:03,980 --> 00:05:05,830
‫È vivo, quindi possiamo sparare.

72
00:05:05,840 --> 00:05:08,840
‫Se Tank non è vivo, non spareremo.

73
00:05:09,020 --> 00:05:14,900
‫Ora, ti starai chiedendo se sia una buona idea mettere il ritorno su una sola riga come mi hai

74
00:05:14,900 --> 00:05:16,610
‫visto fare nei video precedenti.

75
00:05:16,610 --> 00:05:23,960
‫E questa è una buona opportunità per discutere di Unreal Engine, migliori pratiche di programmazione e raccomandazioni.

76
00:05:23,990 --> 00:05:30,590
‫Le pratiche di codifica del motore irreale consigliano di avere parentesi graffe con un corpo per tutte le tue istruzioni if,

77
00:05:30,590 --> 00:05:33,080
‫anche quelle che hanno una singola istruzione.

78
00:05:33,080 --> 00:05:39,200
‫E il motivo è perché se prevedi di aggiungere più righe di codice a questo, hai già il

79
00:05:39,200 --> 00:05:40,190
‫corpo qui.

80
00:05:40,190 --> 00:05:41,690
‫Ed è anche più chiaro.

81
00:05:41,690 --> 00:05:46,160
‫E questo mi porta anche ad un altro punto, che è il mio uso dell'auto.

82
00:05:46,190 --> 00:05:53,720
‫Ho usato auto qui nella classe proiettile un paio di volte e, sebbene possa essere efficiente, a prima

83
00:05:53,720 --> 00:06:01,940
‫vista non è così ovvio quali siano i tipi, motivo per cui l'uso di auto non è raccomandato anche nelle pratiche

84
00:06:01,940 --> 00:06:04,220
‫di codifica del motore irreale.

85
00:06:04,220 --> 00:06:09,770
‫Se desideri attenerti alle pratiche di codifica consigliate da Unreal Engine, puoi sostituire queste istanze di

86
00:06:09,770 --> 00:06:11,570
‫auto con il tipo effettivo.

87
00:06:11,570 --> 00:06:19,460
‫Ad esempio, qui, get instigator controller restituisce un controller A in modo che possiamo cambiarlo in un controller e questo

88
00:06:19,550 --> 00:06:20,990
‫è un puntatore.

89
00:06:20,990 --> 00:06:29,210
‫Questa classe statica di tipo danno restituisce una classe U in modo da poter usare la tua classe qui e ovviamente

90
00:06:29,210 --> 00:06:37,940
‫ottenere il proprietario qui restituisce un attore quindi potremmo usare un attore invece di auto qui e ora se guardi questo codice,

91
00:06:37,940 --> 00:06:44,840
‫è molto più ovvio quali siano questi tipi, mentre auto maschera semplicemente tutto e ti consente di

92
00:06:44,840 --> 00:06:48,740
‫essere pigro e farla franca senza digitare i tipi.

93
00:06:48,740 --> 00:06:55,790
‫Ora a volte non sono sicuro di cosa restituisca una grande espressione, quindi userò auto solo per vedere qual

94
00:06:55,790 --> 00:07:00,410
‫è quel tipo e poi lo sostituirò con il tipo effettivo.

95
00:07:00,410 --> 00:07:07,880
‫Quindi questo è un altro modo in cui puoi usare auto per aiutarti a imparare i tipi restituiti da espressioni lunghe e complicate

96
00:07:07,880 --> 00:07:08,540
‫come questa.

97
00:07:08,540 --> 00:07:14,120
‫Quindi, poiché siamo nelle fasi di rifinitura, sostituirò auto con i nomi dei tipi effettivi

98
00:07:14,120 --> 00:07:15,350
‫qui in proiettile.

99
00:07:15,380 --> 00:07:23,390
‫Entrerò anche nel pedone di base nella funzione di fuoco in cui abbiamo questo proiettile e questo viene restituito

100
00:07:23,390 --> 00:07:25,940
‫da questa grande espressione lunga qui.

101
00:07:25,940 --> 00:07:34,550
‫L'attore Spawn in questo caso restituirà un proiettile, quindi posso sostituirlo con un proiettile.

102
00:07:35,640 --> 00:07:36,150
‫Bene.

103
00:07:36,150 --> 00:07:39,840
‫Quindi questo migliorerà il codice sul lato C++.

104
00:07:39,840 --> 00:07:41,850
‫Andiamo avanti e compiliamo questo.

105
00:07:41,850 --> 00:07:47,910
‫E con una compilazione di successo, torniamo all'editor e premiamo play e assicuriamoci che

106
00:07:47,910 --> 00:07:52,890
‫quelle torri smettano di spararci addosso dopo che siamo morti.

107
00:07:52,890 --> 00:07:54,180
‫Quindi c'è un colpo.

108
00:07:55,050 --> 00:08:00,270
‫Ce n'è un altro, e io sto aspettando, e non vedo più proiettili.

109
00:08:00,300 --> 00:08:01,230
‫Perfetto.

110
00:08:01,260 --> 00:08:01,680
‫Bene.

111
00:08:01,680 --> 00:08:07,500
‫Quindi l'ultimo punto che vorrei trattare prima di concludere questo è il punto di spawn del proiettile.

112
00:08:07,530 --> 00:08:14,550
‫Ora, selezioniamolo qui in BP Pond Tank e assicuriamoci che sia abbastanza distante dal

113
00:08:14,550 --> 00:08:15,120
‫barile.

114
00:08:15,150 --> 00:08:19,890
‫Prima di farlo, lo posizionerò davvero, molto vicino e ti mostrerò alcuni problemi che

115
00:08:19,890 --> 00:08:21,240
‫potrebbero potenzialmente sorgere.

116
00:08:21,270 --> 00:08:27,570
‫Ora, mentre vado avanti e faccio clic con il pulsante sinistro del mouse, vedrai che non vedo il proiettile.

117
00:08:27,570 --> 00:08:31,530
‫In effetti, non lo vedo affatto perché è semplicemente troppo vicino.

118
00:08:31,530 --> 00:08:33,100
‫Stiamo già avendo una collisione.

119
00:08:33,120 --> 00:08:35,970
‫Viene distrutto prima che possa fare qualsiasi cosa.

120
00:08:35,970 --> 00:08:39,810
‫Quindi assicurati che sia molto lontano dalla canna.

121
00:08:39,840 --> 00:08:45,960
‫Stiamo comunque generando del fumo, quindi sembrerà che dietro di esso sembrerà una scia di fumo.

122
00:08:45,960 --> 00:08:48,450
‫Quindi questo sembrerà ancora abbastanza realistico.

123
00:08:49,970 --> 00:08:51,250
‫Quindi sembra abbastanza buono.

124
00:08:51,260 --> 00:08:58,040
‫E mentre siamo sui punti di spawn dei proiettili, potrebbe essere una buona idea andare a guardare la torretta dello stagno BP

125
00:08:58,040 --> 00:09:01,010
‫e selezionare il suo punto di spawn dei proiettili.

126
00:09:01,010 --> 00:09:05,270
‫E se hai avuto problemi a generare proiettili dalla torretta,

127
00:09:05,270 --> 00:09:10,570
‫potresti voler assicurarti che sia anche a una buona distanza dalla canna della torretta.

128
00:09:10,580 --> 00:09:11,810
‫Quindi ci siamo.

129
00:09:11,810 --> 00:09:15,980
‫Abbiamo un gioco funzionale e sembra fantastico.

130
00:09:15,980 --> 00:09:21,650
‫Abbiamo la capacità di girare per il mondo, abbiamo la capacità di sparare proiettili e loro fanno

131
00:09:21,650 --> 00:09:22,760
‫esplodere le cose.

132
00:09:22,760 --> 00:09:25,190
‫Se colpiamo una torre, possiamo distruggerla.

133
00:09:25,190 --> 00:09:28,430
‫Se la torre ci colpisce, può distruggerci.

134
00:09:29,380 --> 00:09:30,700
‫Proprio così.

135
00:09:30,700 --> 00:09:38,110
‫E abbiamo condizioni di vittoria e di sconfitta con i widget HUD che vengono visualizzati sullo schermo e ci dicono se

136
00:09:38,110 --> 00:09:40,330
‫abbiamo vinto o perso la partita.

137
00:09:40,330 --> 00:09:42,610
‫Quindi questo è fantastico.

138
00:09:42,610 --> 00:09:48,670
‫E se desideri impacchettare questo gioco, puoi farlo facilmente salendo in alto e facendo

139
00:09:48,670 --> 00:09:56,710
‫clic sull'icona della piattaforma sia per Windows, se sei su una macchina Windows, sia per iOS, se stai usando

140
00:09:56,710 --> 00:10:00,670
‫un mac macchina, quindi ovviamente hai queste altre opzioni.

141
00:10:00,670 --> 00:10:06,640
‫Se desideri creare pacchetti per altre piattaforme, ti consiglio di fare qualche ricerca online per cercare le diverse

142
00:10:06,640 --> 00:10:08,980
‫piattaforme e come creare pacchetti per loro.

143
00:10:08,980 --> 00:10:14,920
‫Sono su una macchina Windows, quindi posso semplicemente fare clic sul progetto del pacchetto per Windows qui e mi

144
00:10:14,920 --> 00:10:17,410
‫chiederà dove vorrei impacchettare il mio gioco.

145
00:10:17,410 --> 00:10:19,780
‫Ora ho il mio progetto qui in Tune Tanks.

146
00:10:19,780 --> 00:10:24,670
‫Farò clic con il pulsante destro del mouse, creerò una nuova cartella e chiamerò semplicemente questa build.

147
00:10:24,670 --> 00:10:29,110
‫In genere è lì che inseriresti un progetto in pacchetto.

148
00:10:29,110 --> 00:10:34,720
‫Quindi selezionerò quella cartella e consentirò a Unreal Engine di impacchettare il mio gioco.

149
00:10:34,720 --> 00:10:40,300
‫Probabilmente ci vorranno alcuni minuti e una volta terminato, dovrei avere un gioco confezionato.

150
00:10:41,080 --> 00:10:41,530
‫Bene.

151
00:10:41,530 --> 00:10:48,070
‫Quindi, una volta terminato il confezionamento, dovremmo vedere la compilazione riuscita nel registro di output e quindi possiamo cercare

152
00:10:48,070 --> 00:10:51,970
‫nella cartella che abbiamo designato per il nostro progetto in pacchetto.

153
00:10:51,970 --> 00:10:54,670
‫Per me, sarà questa cartella di build.

154
00:10:54,700 --> 00:11:02,220
‫Ora ho impacchettato quattro finestre, quindi ho una cartella Windows ed ecco i miei carri armati, punto xy.

155
00:11:02,230 --> 00:11:03,490
‫È un eseguibile.

156
00:11:03,520 --> 00:11:08,440
‫Posso fare doppio clic su di esso ed ecco il mio progetto finale.

157
00:11:08,440 --> 00:11:09,490
‫posso sparare.

158
00:11:09,580 --> 00:11:11,260
‫posso schivare.

159
00:11:11,990 --> 00:11:18,110
‫Sembra che le mie torri nemiche possano spararmi e io posso distruggerle.

160
00:11:18,110 --> 00:11:19,550
‫Sì, posso distruggerli.

161
00:11:19,550 --> 00:11:23,240
‫Possono distruggermi, a quanto pare, e posso perdere la partita.

162
00:11:23,360 --> 00:11:26,990
‫E ovviamente, se fossi stato un po' più abile, avrei potuto vincere la partita.

163
00:11:27,170 --> 00:11:33,230
‫E per la tua sfida finale, ti incaricherò di aggiungere il tuo sapore al gioco.

164
00:11:33,230 --> 00:11:35,420
‫Fai tuo questo gioco.

165
00:11:35,420 --> 00:11:42,200
‫Trova nuovi suoni, effetti o mesh e crea torri e carri armati dall'aspetto originale.

166
00:11:42,200 --> 00:11:48,410
‫Aggiungi più torri, magari aggiungi diversi livelli di abilità, rendi le torri sempre più difficili man mano che

167
00:11:48,410 --> 00:11:49,580
‫avanzi nel livello.

168
00:11:49,580 --> 00:11:56,480
‫Magari fai salire di livello il carro armato, dargli un livello che puoi aumentare man mano che distruggi sempre più torri.

169
00:11:56,480 --> 00:12:03,980
‫Forse puoi aggiungere una nuova geometria di livello e far salire il carro sulle rampe e provare a distruggere i carri armati in

170
00:12:03,980 --> 00:12:05,330
‫aree difficili da raggiungere.

171
00:12:05,360 --> 00:12:09,050
‫Le possibilità sono infinite, ma soprattutto divertiti.

172
00:12:09,050 --> 00:12:10,700
‫Mentre sviluppi i tuoi giochi.

173
00:12:10,700 --> 00:12:13,160
‫Non metterai in pausa il video per questa sfida.

174
00:12:13,160 --> 00:12:19,070
‫Questo sarà qualcosa che puoi fare da questo momento in poi con i tuoi progetti di gioco.

175
00:12:19,070 --> 00:12:20,630
‫Quindi congratulazioni.

176
00:12:20,630 --> 00:12:21,980
‫Abbiamo finito il nostro gioco.

177
00:12:21,980 --> 00:12:23,750
‫Spero che questa sezione ti sia piaciuta.

178
00:12:23,750 --> 00:12:25,460
‫Mi sono divertito un sacco.

179
00:12:25,460 --> 00:12:28,790
‫Questo è un grande progetto di gioco e hai fatto molta strada.

180
00:12:28,790 --> 00:12:34,070
‫Hai imparato un sacco di abilità in questa sezione del corso, quindi spero che tu sia pronto per

181
00:12:34,070 --> 00:12:35,930
‫passare a cose più eccitanti.

182
00:12:35,930 --> 00:12:36,890
‫Grazie mille.

183
00:12:36,890 --> 00:12:39,770
‫Sono Steven e ci vediamo presto.

