﻿1
00:00:04,460 --> 00:00:05,180
‫Ciao e Benvenuto.

2
00:00:05,180 --> 00:00:10,490
‫In questa lezione creeremo una modalità di gioco KML, che sarà solo una

3
00:00:10,490 --> 00:00:17,660
‫delle possibili modalità di gioco che possiamo creare grazie al metodo virtual -- kill che potrebbe essere chiamato in

4
00:00:17,660 --> 00:00:19,730
‫qualsiasi gioco modalità che vogliamo.

5
00:00:20,000 --> 00:00:24,290
‫Immergiamoci e vediamo come implementeremo questo metodo virtuale.

6
00:00:25,600 --> 00:00:28,600
‫Quindi vorremmo che il nostro gioco potesse finire.

7
00:00:28,610 --> 00:00:29,710
‫Cosa significa che una partita finisca?

8
00:00:29,710 --> 00:00:34,720
‫Significa che entriamo in una sorta di stato in cui abbiamo quello o abbiamo perso.

9
00:00:35,080 --> 00:00:37,210
‫Informiamo il giocatore utilizzando alcune UI.

10
00:00:37,210 --> 00:00:42,880
‫Diamo loro la possibilità di ricominciare e giocare di nuovo, qualcosa del genere.

11
00:00:43,000 --> 00:00:46,830
‫Ora le classi coinvolte in questo in genere sono una modalità di gioco.

12
00:00:46,840 --> 00:00:52,210
‫La modalità di gioco è responsabile della decisione delle regole del gioco, come chi ha vinto e chi ha perso.

13
00:00:52,840 --> 00:00:56,410
‫E per questo, avremo bisogno di sapere chi viene ucciso.

14
00:00:56,410 --> 00:01:02,440
‫Quindi faremo uccidere questo metodo virtuale chiamato pedone, che verrà chiamato come pedone

15
00:01:02,440 --> 00:01:03,940
‫sparatutto quando muore.

16
00:01:03,940 --> 00:01:09,130
‫Che sia o meno l'A. IO. oppure è il giocatore che sta morendo.

17
00:01:10,450 --> 00:01:15,280
‫E inoltre, voglio aggiungere una piccola complicazione qui, ovvero che avrà modalità di gioco diverse

18
00:01:15,280 --> 00:01:18,310
‫derivate dalla nostra modalità di gioco sparatutto principale.

19
00:01:18,610 --> 00:01:20,290
‫Implementeranno quella modalità di gioco.

20
00:01:20,290 --> 00:01:21,520
‫Ecco cosa significa la freccia qui.

21
00:01:21,520 --> 00:01:25,780
‫Spesso è un po' controintuitivo il modo in cui va la freccia, ma uccidili tutti.

22
00:01:25,780 --> 00:01:33,250
‫La modalità di gioco eredita dalla modalità di gioco sparatutto e sovrascrive il pedone ucciso per contare e decidere in

23
00:01:33,250 --> 00:01:35,710
‫modo diverso le regole del gioco.

24
00:01:35,710 --> 00:01:41,740
‫Ecco perché voglio inserire un metodo di uccisione del pedone virtuale nella modalità di gioco dello sparatutto genitore e quindi

25
00:01:42,160 --> 00:01:48,100
‫implementarlo o sovrascriverlo di nuovo nella modalità di gioco kill all, che sarà la modalità di gioco che stiamo

26
00:01:48,100 --> 00:01:49,360
‫implementando per noi stessi.

27
00:01:49,660 --> 00:01:54,430
‫E potresti scegliere di fare diverse modalità di gioco in cui forse vuoi solo uccidere una

28
00:01:54,430 --> 00:01:58,420
‫certa quantità di nemici nel livello piuttosto che tutti o qualcosa del genere.

29
00:01:58,420 --> 00:02:00,430
‫Forse una cattura la bandiera, qualcosa di diverso.

30
00:02:01,960 --> 00:02:08,470
‫Ma fondamentalmente quello che accadrà è che lo sparatutto - troverà la modalità di gioco che ha

31
00:02:08,470 --> 00:02:12,850
‫la modalità di gioco tipo sparatutto e la chiamerà - ucciso.

32
00:02:13,090 --> 00:02:18,970
‫E quindi, a seconda dell'implementazione effettivamente presente, passerà all'implementazione

33
00:02:18,970 --> 00:02:20,980
‫tramite l'override.

34
00:02:22,000 --> 00:02:28,330
‫Ora, un'altra complicazione qui è che la nostra logica dell'interfaccia utente e la logica di riavvio sono davvero qualcosa che

35
00:02:28,330 --> 00:02:35,140
‫dovrebbe accadere nell'interfaccia utente del controller del giocatore generalmente essendo di competenza del giocatore piuttosto che qualcosa di globale come la modalità

36
00:02:35,140 --> 00:02:36,070
‫di gioco.

37
00:02:36,340 --> 00:02:42,790
‫Ciò è particolarmente vero nei giochi multiplayer perché la modalità di gioco in realtà non esiste sulla macchina

38
00:02:42,790 --> 00:02:45,100
‫del giocatore, esiste solo sul server.

39
00:02:45,110 --> 00:02:49,060
‫Quindi qualsiasi cosa dell'interfaccia utente dovrebbe essere in corso nel controller del giocatore.

40
00:02:49,600 --> 00:02:52,630
‫Questa è una complicazione di cui non dobbiamo preoccuparci perché questo non

41
00:02:52,630 --> 00:02:57,190
‫è un gioco multiplayer, ma è comunque utile usare le classi per quello per cui dovrebbero essere utilizzate in Unreal.

42
00:02:57,940 --> 00:03:04,690
‫Quindi il controller del giocatore, l'effettiva classe del controller del giocatore root ha un metodo virtuale chiamato gioco è

43
00:03:04,690 --> 00:03:12,550
‫terminato appositamente per questo scopo in modo che la modalità di gioco possa chiamare questo metodo e possiamo implementarlo nel nostro controller

44
00:03:12,550 --> 00:03:17,500
‫di gioco sparatutto per eseguire l'interfaccia utente, riavviando tutto quel genere di cose.

45
00:03:17,950 --> 00:03:23,560
‫Ma dovremo chiamarlo dalla nostra modalità di gioco quando avremo deciso che il gioco è finito.

46
00:03:23,560 --> 00:03:29,950
‫Quindi chiameremo che il gioco virtuale è terminato sul controller del giocatore root e quindi poiché quel controller del giocatore

47
00:03:29,960 --> 00:03:35,230
‫root è in realtà un giocatore sparatutto, un controller finirà per deviare indietro e chiamare.

48
00:03:35,230 --> 00:03:36,070
‫Questo gioco è terminato.

49
00:03:36,070 --> 00:03:41,980
‫Quindi sembra un percorso tortuoso che chiameremo dalla nostra pedina sparatutto tramite la modalità di gioco sparatutto alla modalità

50
00:03:41,980 --> 00:03:46,360
‫di gioco kill them all al controller del giocatore al controller del giocatore sparatutto.

51
00:03:46,690 --> 00:03:52,300
‫Ma questo ci consente molta flessibilità in termini di dire, beh, possiamo mescolare e abbinare diversi controller di gioco

52
00:03:52,300 --> 00:03:55,720
‫che mostreranno l'interfaccia utente in modi diversi, a livelli diversi.

53
00:03:55,990 --> 00:04:00,070
‫Possiamo mescolare e abbinare diverse modalità di gioco che funzioneranno in modi diversi, ed è per

54
00:04:00,070 --> 00:04:02,200
‫questo che l'ho progettato in questo modo.

55
00:04:02,200 --> 00:04:07,720
‫È un po' eccessivo per il nostro progetto, ma ti mostra come questo potrebbe estendersi ad altri progetti

56
00:04:07,720 --> 00:04:11,740
‫con l'acquisizione delle modalità di gioco e diversi tipi di controller del giocatore.

57
00:04:12,100 --> 00:04:14,170
‫Quindi proviamo a implementarlo.

58
00:04:14,620 --> 00:04:18,010
‫Andremo e prima di tutto troveremo una modalità di gioco del percorso.

59
00:04:18,010 --> 00:04:22,060
‫Ce n'è già uno creato perché sono partito da un progetto C++.

60
00:04:22,450 --> 00:04:28,090
‫Abbiamo questa semplice modalità di gioco sparatutto di base e quello che voglio fare

61
00:04:28,090 --> 00:04:35,770
‫qui è creare una funzione pubblica che tornerà nulla e sarà -- uccisa e dovremo passare nel -- che

62
00:04:35,770 --> 00:04:37,420
‫è stato ucciso qui.

63
00:04:37,420 --> 00:04:42,310
‫Quindi sarà una -- star chiamata -- uccisa in quel modo.

64
00:04:42,400 --> 00:04:46,630
‫E poi all'inizio, faremo di questo un metodo virtuale e andremo avanti

65
00:04:46,630 --> 00:04:50,680
‫e creeremo un'implementazione di base che essenzialmente non fa nulla qui.

66
00:04:50,710 --> 00:04:52,900
‫Quindi creeremo una sottoclasse.

67
00:04:52,900 --> 00:05:00,280
‫Quindi nuova classe C++, mostrerà tutte le classi e cercheremo la modalità di gioco sparatutto

68
00:05:00,280 --> 00:05:10,240
‫semplice come classe base e la chiameremo la modalità di gioco kill em all in questo modo e andiamo avanti e

69
00:05:10,240 --> 00:05:11,830
‫creiamo quella classe.

70
00:05:12,010 --> 00:05:17,950
‫Poi, quando sarà compilato, voglio solo passare un secondo e passare al nostro personaggio sparatutto.

71
00:05:18,100 --> 00:05:23,350
‫CP E puoi vedere qui che abbiamo il nostro è morto nel metodo subisci danno.

72
00:05:23,920 --> 00:05:30,430
‫Ora, se questo è morto, quello che voglio fare è entrare in possesso della nostra modalità di gioco e chiamare il --

73
00:05:30,430 --> 00:05:30,880
‫ucciso.

74
00:05:31,240 --> 00:05:37,660
‫Quindi il modo in cui lo facciamo è iniziare con la chiamata per ottenere il mondo per ottenere la modalità di gioco.

75
00:05:37,900 --> 00:05:40,540
‫Quindi esci dalla modalità di gioco.

76
00:05:40,720 --> 00:05:46,690
‫E poi quello che vogliamo fare è che questa modalità di gioco sia del tipo corretto, che è la modalità di

77
00:05:46,690 --> 00:05:52,120
‫gioco semplice, principale, sparatutto semplice che ci permette di cambiare questo personaggio, usarlo con diverse modalità di gioco,

78
00:05:52,120 --> 00:05:54,670
‫come catturare le modalità di gioco della bandiera.

79
00:05:55,210 --> 00:06:01,390
‫Quindi il modo in cui possiamo farlo, possiamo usare le parentesi angolari proprio nella modalità get o gioco proprio qui.

80
00:06:01,510 --> 00:06:07,570
‫E faremo una semplice modalità di gioco sparatutto e dovremo includerla nella parte superiore.

81
00:06:08,440 --> 00:06:18,040
‫Quindi includi una semplice modalità di gioco sparatutto di base in questo modo non ho capito bene il nome dell'intera classe.

82
00:06:18,040 --> 00:06:18,460
‫Penso.

83
00:06:18,460 --> 00:06:21,880
‫Quindi sarà una semplice modalità di gioco di base.

84
00:06:22,450 --> 00:06:28,420
‫Questo è ciò che stiamo cercando di ottenere e possiamo andare avanti e memorizzarlo in un puntatore variabile, chiamiamola modalità

85
00:06:28,420 --> 00:06:29,290
‫di gioco.

86
00:06:29,290 --> 00:06:35,800
‫E poi quello che vogliamo fare è su questa nuova riga, probabilmente vogliamo controllare di averlo ottenuto e non è un

87
00:06:35,800 --> 00:06:36,730
‫puntatore nullo.

88
00:06:36,730 --> 00:06:40,570
‫Quindi la modalità di gioco non è uguale a un puntatore nullo.

89
00:06:40,600 --> 00:06:47,560
‫E poi, se non è uguale a tutti i punti, è dove vogliamo chiamare la modalità di gioco pedone freccia

90
00:06:47,680 --> 00:06:50,530
‫ucciso e il pedone ucciso è così?

91
00:06:50,620 --> 00:06:54,940
‫Quindi ora la modalità di gioco è a conoscenza dell'uccisione di una pedina.

92
00:06:55,220 --> 00:07:00,460
‫Piccola mini sfida per te per ignorare la modalità di gioco kill them all in modo che tu possa.

93
00:07:00,520 --> 00:07:06,670
‫Esci quando il -- viene ucciso e impostalo come modalità di gioco predefinita nella tua mappa.

94
00:07:06,850 --> 00:07:07,210
‫Bene.

95
00:07:07,210 --> 00:07:09,460
‫Quindi spero che tu abbia provato quella piccola mini sfida.

96
00:07:09,760 --> 00:07:11,770
‫Andremo avanti e implementeremo.

97
00:07:11,770 --> 00:07:17,680
‫Quindi lo farò copiando la sezione pubblica della nostra semplice modalità di gioco sparatutto di base, ed è difficile tenere

98
00:07:17,680 --> 00:07:19,240
‫traccia di tutte queste cose.

99
00:07:19,660 --> 00:07:23,800
‫Quindi andremo alla nostra base della modalità di gioco kill them all, che eredita da essa.

100
00:07:24,430 --> 00:07:31,300
‫E incolleremo il metodo virtuale e aggiungeremo la parola chiave override per assicurarci di

101
00:07:31,300 --> 00:07:33,610
‫sovrascrivere correttamente questo metodo.

102
00:07:34,760 --> 00:07:39,350
‫Quindi creerò un'implementazione in C++ per la nostra modalità di gioco KML di base.

103
00:07:40,130 --> 00:07:42,920
‫È qui che dovremmo ricevere quel messaggio di registro.

104
00:07:42,920 --> 00:07:47,030
‫E solo per essere super attenti, sappiamo che non c'è nulla nell'implementazione.

105
00:07:47,390 --> 00:07:48,380
‫Ma non si sa mai.

106
00:07:48,390 --> 00:07:52,080
‫Le cose potrebbero cambiare in seguito e potremmo essere morsi nella bomba.

107
00:07:52,100 --> 00:07:54,950
‫Quindi vogliamo far uccidere un pedone.

108
00:07:56,340 --> 00:07:58,830
‫Super -- ucciso con il -- ucciso.

109
00:07:59,280 --> 00:07:59,820
‫Ha senso.

110
00:08:00,420 --> 00:08:07,830
‫E poi vogliamo fare un dialogo qui in pratica dicendo che un -- è stato ucciso.

111
00:08:08,490 --> 00:08:15,900
‫E possiamo vedere se funziona andando su Unreal e compilando, quindi andando all'elemento progetti sulla

112
00:08:15,900 --> 00:08:20,850
‫barra degli strumenti e selezionando nelle impostazioni del progetto.

113
00:08:20,850 --> 00:08:27,420
‫La modalità di gioco predefinita che vogliamo essere, se selezioniamo la modalità di gioco, la classe base, vogliamo che sia la modalità

114
00:08:27,420 --> 00:08:31,710
‫di gioco base di kill them all, in pratica vai avanti e fallo.

115
00:08:31,710 --> 00:08:35,370
‫In effetti, non è proprio quello che vogliamo fare se andiamo a selezionare.

116
00:08:35,730 --> 00:08:44,100
‫Volevamo che fosse effettivamente un figlio del progetto e abbiamo già un figlio del progetto che ha molte cose

117
00:08:44,100 --> 00:08:45,000
‫impostate.

118
00:08:45,000 --> 00:08:47,520
‫Quindi facciamo un lavoro di rieducazione lì.

119
00:08:48,390 --> 00:08:53,850
‫Andremo alle origini, troveremo la modalità di gioco sparatutto BP, che abbiamo qui.

120
00:08:54,360 --> 00:09:03,060
‫Rinomineremo questa modalità di gioco kill all BP e quindi possiamo aprirla, agganciare la finestra, aprire l'editor di blueprint

121
00:09:03,060 --> 00:09:11,160
‫completo, andare alle impostazioni della classe e cambiare il genitore nella modalità di gioco KML, in pratica

122
00:09:11,160 --> 00:09:11,670
‫C++.

123
00:09:12,150 --> 00:09:18,360
‫E in questo modo dovremmo eseguire il codice corretto se andiamo al nostro messaggio per visualizzare

124
00:09:18,360 --> 00:09:26,490
‫il registro e premiamo play e poi uccidiamo un personaggio, abbiamo un problema che non sembra avere la configurazione corretta,

125
00:09:26,820 --> 00:09:35,550
‫quindi se torniamo alle impostazioni predefinite della classe e cambia la classe predefinita in modo che sia il personaggio sparatutto BP, dovrebbe

126
00:09:35,550 --> 00:09:36,780
‫essere corretto.

127
00:09:36,960 --> 00:09:39,300
‫Salva e compila nel caso in cui fosse sbagliato.

128
00:09:39,300 --> 00:09:41,910
‫E poi controlla i miei progetti che scendono qui.

129
00:09:41,940 --> 00:09:44,640
‫È selezionato il gioco KML, quello C++.

130
00:09:44,640 --> 00:09:49,470
‫Quindi in realtà vogliamo scegliere il progetto qui dentro e andare avanti e premere play.

131
00:09:49,470 --> 00:09:50,820
‫Ora abbiamo la nostra pedina.

132
00:09:50,820 --> 00:09:55,800
‫Possiamo andare avanti e uccidere questo tizio e puoi vedere che una pedina è stata uccisa.

133
00:09:55,800 --> 00:09:57,090
‫Prince è nel messaggio di registro?

134
00:09:57,420 --> 00:09:59,820
‫Quindi funziona in modo fantastico.

135
00:10:00,360 --> 00:10:05,070
‫Ora, nella prossima sezione, esamineremo la seconda parte di questo, che

136
00:10:05,070 --> 00:10:12,630
‫chiama il gioco è terminato quando in realtà vogliamo terminare il gioco e poter ricominciare da lì in poi.

137
00:10:13,110 --> 00:10:15,720
‫Quindi ci vediamo in quella lezione.

