﻿1
00:00:04,490 --> 00:00:10,940
‫In questa lezione, metteremo insieme un controller del giocatore che riceverà informazioni che il gioco è

2
00:00:10,940 --> 00:00:18,110
‫terminato dalla modalità di gioco e creerà questo comportamento di riavvio che dopo 5 secondi ricarica il livello

3
00:00:18,110 --> 00:00:20,870
‫dopo che il giocatore è morto.

4
00:00:21,080 --> 00:00:22,520
‫Entriamo e vediamo come è fatto.

5
00:00:23,450 --> 00:00:30,950
‫Quindi, quando il gioco è effettivamente finito, dobbiamo avvisare il controller del giocatore e dobbiamo anche avere un controller del giocatore nel

6
00:00:30,950 --> 00:00:37,340
‫nostro C++ in modo da poter implementare il comportamento che ci consente di riavviare il livello e così

7
00:00:37,340 --> 00:00:37,760
‫via.

8
00:00:38,300 --> 00:00:44,180
‫Quindi la prima cosa da fare è quando questo punto viene eliminato, prima di tutto, stiamo solo registrando indiscriminatamente.

9
00:00:44,420 --> 00:00:48,140
‫Vogliamo verificare se il gioco è finito o meno.

10
00:00:48,170 --> 00:00:50,330
‫Ora, ci sono due scenari.

11
00:00:50,330 --> 00:00:52,520
‫Uno è dove vinciamo e uno è dove perdiamo.

12
00:00:52,850 --> 00:00:55,550
‫La sconfitta è la prima che affronterò perché è più facile.

13
00:00:55,550 --> 00:00:58,190
‫Se la pedina uccisa è il giocatore che perdi, questo è tutto.

14
00:00:58,190 --> 00:01:04,100
‫Potresti scegliere di avere più vite con diverse iterazioni di questa modalità di gioco, ma non lo

15
00:01:04,100 --> 00:01:04,790
‫farò.

16
00:01:04,790 --> 00:01:06,170
‫Avrò solo una vita da single.

17
00:01:06,170 --> 00:01:07,460
‫Se muori, game over.

18
00:01:07,460 --> 00:01:08,630
‫Potresti voler riavviare.

19
00:01:09,380 --> 00:01:13,490
‫Quindi, come controlliamo se questa pedina è un controller del giocatore?

20
00:01:13,700 --> 00:01:14,930
‫Bene, è abbastanza semplice.

21
00:01:14,930 --> 00:01:22,490
‫Possiamo semplicemente eseguire un cast in modo da poter eseguire un cast su un controller del giocatore e per la pedina uccisa.

22
00:01:22,760 --> 00:01:25,310
‫E poi se questo non è nullo.

23
00:01:25,310 --> 00:01:26,810
‫Quindi prendiamo il puntatore.

24
00:01:26,810 --> 00:01:34,250
‫Un puntatore di controllo del giocatore lo chiama controller del giocatore e memorizza il risultato di quel puntatore qui.

25
00:01:34,550 --> 00:01:38,450
‫E diremo sostanzialmente se questo non è no.

26
00:01:38,930 --> 00:01:46,010
‫Quindi, se il controller del giocatore non è un puntatore nullo, allora sappiamo che è il giocatore che è morto e che il gioco è

27
00:01:46,010 --> 00:01:47,330
‫finito per il giocatore.

28
00:01:47,810 --> 00:01:52,040
‫Quindi quello che vogliamo fare è chiamare quel metodo del controller del giocatore.

29
00:01:52,040 --> 00:01:57,440
‫Abbiamo già accennato al fatto che esiste un metodo di gioco terminato.

30
00:01:57,470 --> 00:01:58,400
‫Diamo un'occhiata a questo.

31
00:01:58,400 --> 00:02:06,950
‫Se eseguiamo un controllo P e diamo un'occhiata al punto del controller del giocatore e possiamo cercare che il gioco sia terminato.

32
00:02:07,660 --> 00:02:13,340
‫Puoi vedere abbastanza sicuro che qui c'è un metodo virtuale chiamato gioco è terminato e puoi vedere che c'è un focus

33
00:02:13,340 --> 00:02:14,750
‫sulla fine del gioco.

34
00:02:14,750 --> 00:02:16,640
‫Su quale attore dovremmo concentrarci alla fine?

35
00:02:16,640 --> 00:02:19,760
‫Gioco per impostazione predefinita, questo è un punto nullo e probabilmente è quello che userò.

36
00:02:20,810 --> 00:02:22,850
‫E poi diremo, è questo il vincitore?

37
00:02:22,880 --> 00:02:28,070
‫Fondamentalmente, devi lasciare che il giocatore controlli e sappia se ha vinto o meno.

38
00:02:28,430 --> 00:02:31,730
‫E questo è abbastanza semplice, diciamo, in questo caso.

39
00:02:31,730 --> 00:02:32,810
‫No, non l'hanno fatto.

40
00:02:33,290 --> 00:02:41,420
‫Quindi faremo un gioco con la freccia del controller di gioco terminato, quindi metterò un puntatore nullo per il focus del

41
00:02:41,420 --> 00:02:47,480
‫gioco finale perché non abbiamo davvero bisogno di quella funzione e quindi è il vincitore.

42
00:02:47,480 --> 00:02:49,190
‫Sarà semplicemente falso.

43
00:02:49,400 --> 00:02:53,330
‫Questo non è il controller del giocatore vincente perché è quello che è appena morto.

44
00:02:54,310 --> 00:02:56,890
‫Quindi è tempo per una piccola sfida da implementare.

45
00:02:56,890 --> 00:02:59,470
‫Il gioco è terminato in un controller di gioco.

46
00:02:59,800 --> 00:03:06,880
‫Ciò significa che dobbiamo creare un controller del lettore C++, creare la sua sottoclasse blueprint, generare quella sottoclasse blueprint per

47
00:03:06,880 --> 00:03:12,460
‫impostazione predefinita dalla nostra modalità di gioco e quindi vuoi andare avanti e sovrascrivere.

48
00:03:12,490 --> 00:03:17,320
‫Il gioco è terminato e inserisci un messaggio di registro per verificare che stiamo effettivamente ricevendo.

49
00:03:17,320 --> 00:03:19,600
‫Quella partita è finita al momento giusto.

50
00:03:19,990 --> 00:03:20,980
‫Metti in pausa, video e prova.

51
00:03:21,260 --> 00:03:21,540
‫Bene.

52
00:03:21,550 --> 00:03:22,060
‫Ben tornato.

53
00:03:22,360 --> 00:03:27,550
‫Quindi, passaggio uno, crea quel controller del lettore C++, crea una nuova classe C++.

54
00:03:27,700 --> 00:03:30,700
‫Quindi vai a cercare, vediamo, controller del giocatore.

55
00:03:30,730 --> 00:03:34,690
‫Successivamente, lo chiameremo controller del giocatore sparatutto.

56
00:03:34,720 --> 00:03:35,860
‫Vai avanti e crea quella classe.

57
00:03:35,980 --> 00:03:44,510
‫Una volta fatto, vogliamo passare ai nostri progetti e creare una classe di progetti basata su di essi.

58
00:03:44,530 --> 00:03:50,410
‫Quindi vogliamo il controller del giocatore sparatutto come base in questo modo e lo chiameremo BP,

59
00:03:50,830 --> 00:03:53,050
‫underscore controller del giocatore sparatutto.

60
00:03:53,170 --> 00:03:57,520
‫Questo non è attualmente realmente necessario, ma più avanti vorremo collegare alcune risorse dell'interfaccia

61
00:03:57,520 --> 00:03:59,170
‫utente al controller del giocatore.

62
00:03:59,170 --> 00:04:00,700
‫Quindi lo avremo lì pronto.

63
00:04:01,240 --> 00:04:07,840
‫Quindi andremo alla modalità di gioco BP KML e la collegheremo perché vogliamo cambiare la classe del controller del giocatore

64
00:04:07,840 --> 00:04:12,970
‫predefinita dal controller del giocatore al nostro BPM, il controller del giocatore sparatutto della scuola.

65
00:04:13,420 --> 00:04:13,810
‫Freddo.

66
00:04:14,440 --> 00:04:16,330
‫Quindi vogliamo sovrascrivere.

67
00:04:16,330 --> 00:04:17,980
‫La nostra partita è finita.

68
00:04:18,610 --> 00:04:21,990
‫Quindi vediamo se passiamo al controllo del giocatore su h.

69
00:04:22,000 --> 00:04:24,310
‫Possiamo vedere che questo è nella sezione pubblica.

70
00:04:24,520 --> 00:04:25,300
‫Ecco la firma.

71
00:04:25,300 --> 00:04:25,930
‫Copiamolo.

72
00:04:25,930 --> 00:04:31,090
‫Entra come controller di gioco sparatutto punto h e crea pubblico.

73
00:04:32,110 --> 00:04:35,590
‫A quel vuoto virtuale il gioco è finito.

74
00:04:35,620 --> 00:04:39,970
‫Fantastico e dobbiamo già sovrascrivere perché è stato chiaramente ignorato da qualche parte.

75
00:04:41,190 --> 00:04:45,300
‫E poi quello che possiamo fare è andare avanti e implementarlo.

76
00:04:45,330 --> 00:04:48,480
‫Control shift p vogliamo chiamarlo un super ricordo.

77
00:04:49,820 --> 00:04:52,820
‫E vogliamo che il gioco sia finito così.

78
00:04:53,870 --> 00:05:01,640
‫E vogliamo passare al focus di fine partita e la B vince e quindi vogliamo registrare.

79
00:05:01,790 --> 00:05:02,480
‫Quindi accedi.

80
00:05:02,930 --> 00:05:04,040
‫È la mia macro lì.

81
00:05:04,700 --> 00:05:07,100
‫Abbiamo finito.

82
00:05:07,190 --> 00:05:10,100
‫Sarà il messaggio di registro che uscirà alla fine.

83
00:05:10,310 --> 00:05:12,620
‫Quindi compiliamo e vediamo se funziona.

84
00:05:12,870 --> 00:05:14,240
‫Vado al registro di output.

85
00:05:14,690 --> 00:05:15,290
‫Premi play.

86
00:05:15,500 --> 00:05:18,350
‫Vai e fatti uccidere, in pratica.

87
00:05:18,410 --> 00:05:19,920
‫La salute sta rallentando.

88
00:05:20,660 --> 00:05:23,420
‫E poi dovremmo vedere un messaggio.

89
00:05:23,450 --> 00:05:24,440
‫Stiamo ricevendo il messaggio?

90
00:05:24,470 --> 00:05:24,890
‫No.

91
00:05:24,920 --> 00:05:25,850
‫Quindi diamo un'occhiata.

92
00:05:25,850 --> 00:05:27,170
‫Qual è il controller del giocatore qui?

93
00:05:27,200 --> 00:05:32,600
‫Il controller del giocatore sparatutto underscore BP sembra essere quello corretto.

94
00:05:32,930 --> 00:05:35,270
‫Abbiamo l'override Il gioco è terminato.

95
00:05:35,570 --> 00:05:37,190
‫Ora, qui, ho individuato un bug.

96
00:05:37,220 --> 00:05:41,120
‫Ora, questo è qualcosa che alcuni di voi potrebbero aver notato e di cui

97
00:05:41,630 --> 00:05:47,690
‫hanno urlato sullo schermo è che qui abbiamo il nostro controller del giocatore su cui stiamo lanciando e mi sto confondendo con

98
00:05:47,690 --> 00:05:49,450
‫la vera pedina del giocatore.

99
00:05:49,910 --> 00:05:57,220
‫Quindi quello che vogliamo fare qui è dire di ottenere il controllore del pedone che è stato ucciso.

100
00:05:57,230 --> 00:06:01,220
‫Quindi il punto ucciso dal pedone ottiene l'errore del controller.

101
00:06:01,310 --> 00:06:06,040
‫Quindi freccia prendi il controller e poi vogliamo lanciarlo sul controller del giocatore.

102
00:06:06,080 --> 00:06:08,530
‫E se è nullo, ok, dovrebbe funzionare.

103
00:06:08,540 --> 00:06:10,670
‫Quindi andiamo avanti e proviamolo.

104
00:06:10,760 --> 00:06:12,050
‫Vai avanti e premi play.

105
00:06:12,780 --> 00:06:13,760
‫Castle è stato ucciso di nuovo.

106
00:06:15,610 --> 00:06:18,730
‫E anche questa volta non riceviamo alcun messaggio.

107
00:06:19,000 --> 00:06:21,100
‫E questa volta, è per una ragione sottile.

108
00:06:21,550 --> 00:06:24,250
‫Questo perché ci stiamo staccando dal controller.

109
00:06:24,760 --> 00:06:26,860
‫Prima di chiamarlo -- ucciso.

110
00:06:26,860 --> 00:06:32,560
‫Quindi, quando cerca di ottenere il pedone di controllo, in realtà è no, non c'è più un pedone di controllo.

111
00:06:32,830 --> 00:06:38,200
‫Quindi dobbiamo eseguire questa notifica appena prima di eseguire il distacco dal controller.

112
00:06:38,590 --> 00:06:42,190
‫Includo salire la linea che si impossessa della nostra modalità di gioco.

113
00:06:42,190 --> 00:06:46,960
‫Non credo che importerebbe, ma ora che ci penso davvero, sì, certo che lo fa.

114
00:06:47,290 --> 00:06:49,930
‫Quindi entriamo nel nostro livello e giochiamo.

115
00:06:50,500 --> 00:06:51,640
‫Andiamo a farci sparare.

116
00:06:52,060 --> 00:06:56,860
‫E una volta fatto, puoi vedere che abbiamo finito e viene stampato come vogliamo.

117
00:06:56,890 --> 00:06:58,960
‫Quindi abbiamo avuto qualche intoppo lungo la strada.

118
00:06:58,960 --> 00:07:01,390
‫Non è colpa tua se non l'hai ottenuto nella sfida.

119
00:07:01,750 --> 00:07:03,690
‫Hai fatto tutto il resto fino a quel momento.

120
00:07:03,700 --> 00:07:04,690
‫È grandioso.

121
00:07:05,110 --> 00:07:10,780
‫Quindi si spera che tu abbia provato a eseguire il debug di questo, ma non preoccuparti se sei rimasto bloccato su quelle cose.

122
00:07:11,350 --> 00:07:17,650
‫L'ultima cosa che volevo fare qui è riavviare effettivamente il gioco su un timer.

123
00:07:18,100 --> 00:07:25,210
‫Ora il modo in cui possiamo farlo è abbastanza semplice perché il controller del giocatore ha effettivamente un metodo di

124
00:07:25,450 --> 00:07:25,900
‫riavvio.

125
00:07:25,900 --> 00:07:30,160
‫Quindi, se andiamo a dare un'occhiata a questo, dovrebbe essere un livello di riavvio.

126
00:07:30,160 --> 00:07:35,560
‫È quello che vogliamo chiamare e vogliamo farlo su un timer.

127
00:07:35,560 --> 00:07:42,460
‫Quindi abbiamo usato i timer prima per fare cose ripetute, ma possiamo anche usarlo solo per ritardare un'azione di

128
00:07:42,460 --> 00:07:43,720
‫un certo importo.

129
00:07:44,200 --> 00:07:49,930
‫Quindi andrò allo sparatutto, al controller, al punto H e creerò una proprietà privata qui.

130
00:07:50,890 --> 00:07:56,500
‫Privato può essere la tua proprietà che può essere modificata ovunque.

131
00:07:58,590 --> 00:07:59,100
‫Galleggiante.

132
00:07:59,100 --> 00:08:02,540
‫Questo sarà il ritardo di riavvio.

133
00:08:03,080 --> 00:08:05,460
‫Puoi capire perché abbiamo già bisogno di una base di progetto per questo.

134
00:08:05,850 --> 00:08:08,160
‫Ho intenzione di dargli un ritardo di 5/2.

135
00:08:08,670 --> 00:08:16,680
‫Quindi entrerò nel C++ e vorremo fare bene un timer per ottenere, timer manager.

136
00:08:17,610 --> 00:08:19,620
‫E poi possiamo farlo.

137
00:08:19,890 --> 00:08:21,840
‫Quindi dobbiamo includere.

138
00:08:21,870 --> 00:08:27,690
‫Quindi include hash e sarà il punto H del timer manager.

139
00:08:28,410 --> 00:08:33,180
‫Quindi dovremmo essere in grado di utilizzare l'operatore punto perché il tipo restituito qui è un

140
00:08:33,180 --> 00:08:35,250
‫riferimento e faremo un timer impostato.

141
00:08:35,340 --> 00:08:38,130
‫E qui dentro dobbiamo passare una maniglia del timer.

142
00:08:38,130 --> 00:08:40,740
‫Quindi, nella sezione privata, andiamo a creare un set.

143
00:08:40,740 --> 00:08:42,810
‫Potrebbe essere una maniglia del timer f.

144
00:08:42,930 --> 00:08:46,410
‫Lo chiamerò il timer di riavvio come.

145
00:08:46,410 --> 00:08:51,060
‫Quindi quella sarà la maniglia che passeremo al nostro timer impostato.

146
00:08:51,270 --> 00:08:57,780
‫La prossima cosa di cui abbiamo bisogno sulla quinta firma qui è in realtà avere l'oggetto che vogliamo chiamare, che

147
00:08:57,780 --> 00:08:58,830
‫sarà solo questo.

148
00:08:59,550 --> 00:09:04,950
‫E poi ci sarà penso che dovrebbe essere solo il metodo stesso.

149
00:09:05,610 --> 00:09:08,250
‫Quindi possiamo farlo facendo e commerciale.

150
00:09:08,250 --> 00:09:13,890
‫E poi è in realtà il metodo, il metodo del livello di riavvio, che vogliamo richiamare che è

151
00:09:13,890 --> 00:09:16,140
‫stato definito sul controller del giocatore A.

152
00:09:16,140 --> 00:09:17,640
‫Quindi un controller del giocatore.

153
00:09:19,270 --> 00:09:21,190
‫Due punti, livello di riavvio dei due punti.

154
00:09:21,700 --> 00:09:27,970
‫E poi non ci resta che passare il ritardo che abbiamo già definito come ritardo di ripartenza.

155
00:09:28,690 --> 00:09:35,740
‫Quindi fallo, ma un punto e virgola alla fine c'è e speriamo di ricominciare dopo 5

156
00:09:35,740 --> 00:09:36,520
‫secondi.

157
00:09:36,920 --> 00:09:41,590
‫Ora semplificheremo un po' i test aprendo il nostro fucile e rendendolo un po'

158
00:09:41,590 --> 00:09:42,490
‫più letale.

159
00:09:42,490 --> 00:09:46,180
‫Quindi vado alle impostazioni predefinite, faccio il danno a 50.

160
00:09:46,180 --> 00:09:47,890
‫Quindi fatti uccidere con due colpi.

161
00:09:48,310 --> 00:09:49,630
‫Andiamo e premiamo play.

162
00:09:50,660 --> 00:09:52,010
‫Fatti ammazzare in fretta.

163
00:09:53,290 --> 00:10:00,400
‫E poi, dopo 5 secondi, speriamo di dover riavviare il livello, ricominciamo e torniamo al livello.

164
00:10:00,410 --> 00:10:02,830
‫Quindi il nostro timer funziona come ci aspettiamo.

165
00:10:03,730 --> 00:10:11,350
‫Ora, nelle versioni successive, scoprirai che invece di riavviare, quello che vedrai è un messaggio di errore simile a questo e

166
00:10:11,350 --> 00:10:16,980
‫parla di errori di viaggio e dice qualcosa sul fatto che leggi una tiepida sandbox,

167
00:10:17,140 --> 00:10:18,370
‫bla bla bla.

168
00:10:18,700 --> 00:10:23,620
‫Bene, il modo in cui dobbiamo aggirare questo problema quando stiamo provando a riavviare e vogliamo

169
00:10:23,620 --> 00:10:29,800
‫verificare se il nostro riavvio funziona, è che andiamo al nostro menu punto, punto, punto invece del menu di riproduzione e

170
00:10:29,800 --> 00:10:31,840
‫dobbiamo giocare come un gioco autonomo.

171
00:10:31,870 --> 00:10:38,290
‫Se si gioca a un gioco standalone ci vuole un po' più di tempo per l'avvio,

172
00:10:38,290 --> 00:10:43,390
‫ma il riavvio funzionerà come previsto e vediamo il livello ricaricato.

173
00:10:43,630 --> 00:10:46,510
‫Ora, ovviamente, non ci sono molte indicazioni che ciò accadrà.

174
00:10:46,510 --> 00:10:50,100
‫Quindi esamineremo l'interfaccia utente nelle prossime lezioni.

175
00:10:50,110 --> 00:10:50,770
‫Ci vediamo lì.

