﻿1
00:00:04,080 --> 00:00:05,730
‫Ciao e bentornato.

2
00:00:05,760 --> 00:00:10,380
‫Ora siamo pronti per ruotare la torretta e vorremmo farlo usando il mouse.

3
00:00:10,380 --> 00:00:14,790
‫E quella posizione del colpo di traccia che abbiamo fatto nel video precedente.

4
00:00:14,880 --> 00:00:22,200
‫Quindi, mentre sposto il cursore del mouse, la torretta sta ruotando e rivolta nella direzione del cursore del mouse.

5
00:00:22,320 --> 00:00:28,110
‫E anche quando clicco nella finestra e inizio a giocare, posso comunque spostare il cursore del mouse

6
00:00:28,110 --> 00:00:31,080
‫per ruotare la torretta e impostarne la direzione.

7
00:00:31,110 --> 00:00:35,850
‫Questo mi permetterà di mirare quando ho la capacità di sparare proiettili.

8
00:00:35,880 --> 00:00:36,200
‫Bene.

9
00:00:36,240 --> 00:00:41,770
‫Quindi, per raggiungere questo obiettivo, dobbiamo trovare la direzione in cui vogliamo che punti la nostra torretta.

10
00:00:41,790 --> 00:00:46,410
‫E una volta trovata quella direzione, possiamo impostare la rotazione della mesh della torretta.

11
00:00:46,500 --> 00:00:52,470
‫Ora, per ottenere la direzione in cui vorremmo puntare la torretta, dobbiamo fare un po' di

12
00:00:52,470 --> 00:00:53,500
‫matematica vettoriale.

13
00:00:53,520 --> 00:00:59,570
‫Quello che stiamo cercando è un vettore dalla torretta del carro armato alla nostra posizione di rilevamento.

14
00:00:59,580 --> 00:01:05,940
‫Ora possiamo facilmente ottenere la posizione del nostro carro armato o di qualsiasi suo componente, come la posizione della torretta

15
00:01:05,940 --> 00:01:06,960
‫del carro armato.

16
00:01:06,990 --> 00:01:09,600
‫Chiameremo questa posizione, torretta, posizione.

17
00:01:09,600 --> 00:01:13,440
‫E sappiamo anche come ottenere la posizione della testa di traccia.

18
00:01:13,470 --> 00:01:15,800
‫Chiameremo questa traccia hit location.

19
00:01:15,810 --> 00:01:20,760
‫Quello che ci interessa è il vettore dalla posizione della torretta per tracciare la posizione del colpo.

20
00:01:20,760 --> 00:01:23,100
‫Chiameremo questo vettore come target.

21
00:01:23,130 --> 00:01:27,030
‫Ora la matematica vettoriale per raggiungere l'obiettivo è in realtà abbastanza semplice.

22
00:01:27,060 --> 00:01:33,120
‫Per ottenere un vettore da un punto iniziale a un punto finale è sempre il punto finale meno il punto iniziale.

23
00:01:33,420 --> 00:01:39,270
‫Quindi, se prendiamo la nostra traccia, colpiamo la posizione e sottraiamo la posizione della torretta del vettore, il

24
00:01:39,270 --> 00:01:41,620
‫vettore che ne risulta è il bersaglio.

25
00:01:41,640 --> 00:01:47,160
‫Ora, una volta che abbiamo i due vettori di direzione target, vogliamo convertirlo in una rotazione in modo da poter

26
00:01:47,160 --> 00:01:49,530
‫impostare la rotazione della torretta del carro armato.

27
00:01:49,530 --> 00:01:53,750
‫E il tipo vettoriale ha una funzione incorporata chiamata rotazione.

28
00:01:53,760 --> 00:02:01,230
‫Quindi, se prendiamo il nostro vettore di destinazione e chiamiamo rotazione su di esso, questo restituirebbe un rotatore F corrispondente a

29
00:02:01,230 --> 00:02:02,260
‫quella direzione.

30
00:02:02,280 --> 00:02:04,430
‫Ora dobbiamo tenere a mente qualcosa.

31
00:02:04,440 --> 00:02:11,160
‫Il risultato del colpo di traccia sarà spesso sul pavimento e il vettore dalla torretta del carro armato al risultato

32
00:02:11,160 --> 00:02:14,620
‫del colpo di traccia non sarà parallelo al suolo.

33
00:02:14,640 --> 00:02:20,850
‫Ciò significa che se impostiamo la rotazione della torretta del carro armato sul rotatore che otteniamo da quel vettore di direzione, potremmo

34
00:02:20,850 --> 00:02:26,790
‫ottenere qualcosa del genere in cui la torretta è inclinata verso il basso verso il suolo, ma non vogliamo che la

35
00:02:26,790 --> 00:02:29,310
‫torretta del carro armato ruoti verso il basso.

36
00:02:29,310 --> 00:02:31,350
‫Vogliamo che punti ancora avanti.

37
00:02:31,350 --> 00:02:33,780
‫Quindi questo è il risultato che vogliamo.

38
00:02:33,810 --> 00:02:39,180
‫In altre parole, vogliamo solo cambiare la componente sì della rotazione della torretta del carro armato.

39
00:02:39,180 --> 00:02:44,550
‫In questo modo punta nella direzione corretta ma rimane comunque parallelo al suolo.

40
00:02:44,550 --> 00:02:51,060
‫Abbiamo solo cambiato la sua imbardata, quindi torniamo al codice VS e creiamo una funzione per ruotare la torretta del carro

41
00:02:51,060 --> 00:02:51,600
‫armato.

42
00:02:51,630 --> 00:02:57,210
‫Ora ruoteremo la torretta sul carro armato, ma vorremmo anche ruotare la torretta sulla nostra

43
00:02:57,210 --> 00:03:04,290
‫torre nemica e presto verrà creata la torre derivata dalla base pon, il che significa che se creiamo una

44
00:03:04,290 --> 00:03:08,820
‫torretta rotante funzione possiamo inserirlo qui nella classe pong di base.

45
00:03:08,820 --> 00:03:12,930
‫In questo modo sia il carro armato che la torre erediteranno questa funzione.

46
00:03:12,930 --> 00:03:18,480
‫Poiché prevediamo di utilizzarlo sia nella torre che nel serbatoio, possiamo proteggere questa funzione.

47
00:03:18,720 --> 00:03:24,630
‫Quindi aggiungerò una sezione protetta e tutte le funzioni e le variabili che posizioniamo nella sezione

48
00:03:24,630 --> 00:03:29,220
‫protetta saranno accessibili in queste classi figlio, ma non in altre classi.

49
00:03:29,220 --> 00:03:32,580
‫Quindi è limitato quasi quanto le variabili private.

50
00:03:32,580 --> 00:03:34,860
‫Ora questa funzione può restituire void.

51
00:03:34,860 --> 00:03:37,710
‫Chiamerò questa torretta rotante.

52
00:03:38,850 --> 00:03:44,690
‫E per ruotare la torretta, avrò bisogno di una sorta di destinazione da guardare.

53
00:03:44,700 --> 00:03:49,620
‫Questo può essere un vettore f e possiamo chiamarlo look at target.

54
00:03:49,620 --> 00:03:56,490
‫Quindi l'idea è che se abbiamo una funzione che possiamo trasmettere in una sorta di posizione nel mondo, la

55
00:03:56,490 --> 00:04:00,360
‫funzione dovrebbe comportare la rotazione della torretta verso quella posizione.

56
00:04:00,360 --> 00:04:04,680
‫Quindi andiamo avanti e forniamo una definizione di funzione per ruotare la torretta.

57
00:04:04,680 --> 00:04:11,280
‫Quindi qui nel pedone di base CP appena sotto il costruttore, implementerò la rotazione della torretta.

58
00:04:11,280 --> 00:04:16,680
‫E ovviamente ho bisogno del nome di una classe pedina di base con l'operatore di risoluzione dell'ambito qui.

59
00:04:16,680 --> 00:04:21,180
‫Quindi ora che ho la rotazione della torretta, pensiamo a come lo implementeremo.

60
00:04:21,180 --> 00:04:28,320
‫La prima cosa di cui abbiamo bisogno è che per indirizzare il vettore dal componente della torretta al risultato del colpo di traccia

61
00:04:28,320 --> 00:04:30,120
‫sotto il cursore del mouse.

62
00:04:30,120 --> 00:04:38,070
‫Quindi questo può essere un vettore F locale chiamato a target e lo imposteremo uguale al risultato di alcuni

63
00:04:38,070 --> 00:04:38,970
‫calcoli vettoriali.

64
00:04:38,970 --> 00:04:43,350
‫Ricorda, sarà la destinazione meno il punto di partenza.

65
00:04:43,350 --> 00:04:50,910
‫E la destinazione è guardare il bersaglio e il punto di partenza sarà la posizione della torretta del carro armato, in

66
00:04:50,910 --> 00:04:54,030
‫altre parole, la posizione della maglia della torretta.

67
00:04:54,030 --> 00:04:59,880
‫Quindi possiamo dire mesh della torretta e possiamo ottenere la posizione della mesh della torretta.

68
00:04:59,880 --> 00:05:07,290
‫Ora il modo per ottenere la posizione mondiale di un componente è con questa funzione ottieni la posizione del componente.

69
00:05:07,290 --> 00:05:09,630
‫Appartiene alla classe dei componenti della scena d'uso.

70
00:05:09,630 --> 00:05:11,460
‫Quindi tutti i componenti della scena ce l'hanno.

71
00:05:11,460 --> 00:05:15,690
‫Quindi dalla mesh della torretta chiameremo get component location.

72
00:05:16,340 --> 00:05:23,600
‫Quindi guarda il bersaglio meno la posizione della mesh della torretta ci fornisce il vettore dalla mesh della torretta al bersaglio di

73
00:05:23,600 --> 00:05:24,290
‫vedetta.

74
00:05:24,320 --> 00:05:30,590
‫Ora, come ho già detto, possiamo ottenere un rotatore EF da un target usando la funzione di rotazione dei vettori F.

75
00:05:30,590 --> 00:05:37,100
‫Quindi creeremo un rotatore F e possiamo chiamare questo sguardo a rotazione e lo imposteremo

76
00:05:37,100 --> 00:05:40,100
‫uguale a rotazione del punto target.

77
00:05:40,280 --> 00:05:41,570
‫Questa è una chiamata di funzione.

78
00:05:41,570 --> 00:05:46,700
‫Quindi ora abbiamo il rotatore corrispondente a questo vettore di direzione target.

79
00:05:46,700 --> 00:05:49,550
‫Ma il fatto è che ci preoccupiamo solo della YA.

80
00:05:49,550 --> 00:05:51,680
‫Non vogliamo cambiare tono o ruolo.

81
00:05:51,680 --> 00:05:57,290
‫Vogliamo solo ruotare la torretta attorno all'asse z e mantenerla parallela al suolo.

82
00:05:57,290 --> 00:05:59,420
‫Ora possiamo farlo in molti modi.

83
00:05:59,420 --> 00:06:05,870
‫Per uno, possiamo dare un'occhiata alla rotazione, al tono e azzerarlo.

84
00:06:05,870 --> 00:06:08,180
‫In altre parole, impostalo uguale a zero.

85
00:06:08,210 --> 00:06:14,240
‫Possiamo anche dare un'occhiata al ruolo del punto di rotazione e azzerarlo.

86
00:06:14,240 --> 00:06:21,020
‫Ora, dopo aver impostato beccheggio e rollio a zero, abbiamo la rotazione che vogliamo, che è solo il componente.

87
00:06:21,020 --> 00:06:22,460
‫Questo è un modo per farlo.

88
00:06:22,460 --> 00:06:26,450
‫Un altro sarebbe quello di utilizzare uno dei sovraccarichi del costruttore del rotatore F.

89
00:06:26,450 --> 00:06:34,820
‫Se abbiamo detto f rotator con parentesi e passato alcuni valori come punto zero F per il primo e il pop up

90
00:06:34,820 --> 00:06:38,300
‫mi dice che quel primo input è il tono.

91
00:06:38,300 --> 00:06:43,880
‫E poi per ya possiamo usare per indirizzare la rotazione.

92
00:06:44,330 --> 00:06:44,990
‫Sì.

93
00:06:44,990 --> 00:06:47,960
‫E poi per il ruolo potremmo usare il punto zero F.

94
00:06:47,960 --> 00:06:55,820
‫Ora ciò che fa è creare un nuovo rotatore F con zero per il passo, zero per il ruolo e

95
00:06:55,820 --> 00:06:59,420
‫il componente del rotatore restituito da due rotazioni target.

96
00:06:59,420 --> 00:07:05,300
‫Quindi il valore restituito da questo ci darebbe lo stesso risultato di quello che abbiamo fatto qui con queste tre righe.

97
00:07:05,300 --> 00:07:11,990
‫Quindi, poiché questo è un po 'più compatto ed elegante, penso che preferirei usarlo in modo da

98
00:07:11,990 --> 00:07:19,370
‫poter inizializzare il vettore di rotazione con il rotatore F restituito chiamando il costruttore del rotatore F in questo modo.

99
00:07:19,370 --> 00:07:21,380
‫Quindi rimuoverò questa riga qui sotto.

100
00:07:21,380 --> 00:07:23,360
‫E ora diamo un'occhiata alla rotazione.

101
00:07:23,360 --> 00:07:29,000
‫Ora l'ultima cosa da fare in questa funzione è impostare la rotazione per il mash della torretta.

102
00:07:29,000 --> 00:07:36,440
‫Ora possiamo impostare la rotazione per un dato componente usando questa funzione imposta nuovamente la rotazione del mondo, appartiene all'uso

103
00:07:36,440 --> 00:07:38,270
‫del componente della scena.

104
00:07:38,270 --> 00:07:44,300
‫E il motivo per cui stiamo usando la rotazione delle parole impostate piuttosto che aggiungere una sorta di offset

105
00:07:44,300 --> 00:07:50,420
‫di rotazione locale è perché abbiamo una rotazione nello spazio mondiale due target è un vettore di direzione dello spazio mondiale.

106
00:07:50,420 --> 00:07:56,000
‫Prendiamo la posizione della mesh della torretta nello spazio mondiale e sottraiamo lo sguardo alla posizione target nello

107
00:07:56,000 --> 00:07:56,750
‫spazio mondiale.

108
00:07:56,750 --> 00:07:58,850
‫Quindi questa è una direzione spaziale mondiale.

109
00:07:58,850 --> 00:08:02,450
‫Pertanto lo sguardo alla rotazione è una rotazione dello spazio mondiale.

110
00:08:02,450 --> 00:08:06,140
‫Quindi useremo la rotazione del mondo impostata sulla mesh della torretta.

111
00:08:06,290 --> 00:08:13,280
‫Quindi diremo torretta mesh, impostare la rotazione del mondo e passeremo in rassegna la rotazione.

112
00:08:13,280 --> 00:08:19,550
‫Quindi ora abbiamo una funzione che può prendere qualsiasi bersaglio nel mondo e girare la mesh della torretta per

113
00:08:19,550 --> 00:08:22,550
‫guardarlo, ma non ruoterà la mesh verso il basso.

114
00:08:22,550 --> 00:08:28,100
‫Cambierà solo la sua imbardata, quindi ruoterà in modo tale che una torretta di un carro armato dovrebbe ruotare.

115
00:08:28,100 --> 00:08:31,100
‫Quindi ora abbiamo una funzione per ruotare la torretta.

116
00:08:31,130 --> 00:08:36,980
‫Ti sfiderò a chiamare questa funzione per impostare la rotazione della torretta, chiamare la funzione di rotazione della torretta

117
00:08:36,980 --> 00:08:38,870
‫nella classe del carro armato.

118
00:08:38,870 --> 00:08:40,730
‫Questa è una funzione protetta.

119
00:08:40,730 --> 00:08:43,070
‫Quindi la classe del carro armato ha accesso ad esso.

120
00:08:43,070 --> 00:08:49,220
‫Ora ruota la torretta prende un vettore F, guarda il bersaglio, userai quel punto di impatto nel risultato del colpo

121
00:08:49,220 --> 00:08:51,410
‫F dal nostro tracciato di linea.

122
00:08:51,410 --> 00:08:57,170
‫Quindi lascerò a te il compito di trovare la posizione corretta nel codice per chiamare questa funzione.

123
00:08:57,410 --> 00:09:00,920
‫Quindi metti in pausa il video e posiziona la funzione di rotazione della torretta.

124
00:09:00,920 --> 00:09:02,870
‫Chiama la classe del carro armato.

125
00:09:06,000 --> 00:09:06,150
‫Bene.

126
00:09:06,300 --> 00:09:09,960
‫Quindi abbiamo la nostra funzione di rotazione della torretta e siamo pronti a chiamarla.

127
00:09:10,140 --> 00:09:18,200
‫Vado a fare il pieno ed ecco la mia funzione tick all'interno del check if per il controller del giocatore ref.

128
00:09:18,210 --> 00:09:24,870
‫Ho il mio risultato hit e dopo che è stato chiamato un risultato get hit sotto il cursore, il risultato hit

129
00:09:24,870 --> 00:09:25,860
‫avrà dati validi.

130
00:09:25,860 --> 00:09:30,480
‫In effetti, stiamo usando quel punto di impatto del risultato del colpo e disegnamo la sfera di debug.

131
00:09:30,510 --> 00:09:35,370
‫Ora, poiché non ho più bisogno di disegnare la sfera di debug, andrò avanti ed eliminerò quella.

132
00:09:35,370 --> 00:09:39,900
‫E invece chiamerò la nostra funzione protetta ruota torretta.

133
00:09:39,900 --> 00:09:45,750
‫E per quanto riguarda l'obiettivo, passerò il punto di impatto del punto del risultato del colpo.

134
00:09:47,140 --> 00:09:53,320
‫Quindi ora ogni fotogramma ruoteremo la torretta verso quel punto di impatto dal risultato del nostro colpo.

135
00:09:53,350 --> 00:09:59,050
‫Ora, prima di compilare questo, non utilizzo più gli helper di debug di disegno, quindi andrò avanti e rimuoverò quel

136
00:09:59,050 --> 00:10:00,130
‫file di intestazione.

137
00:10:00,340 --> 00:10:00,820
‫Bene.

138
00:10:00,850 --> 00:10:02,590
‫Ora sono pronto per compilare.

139
00:10:02,970 --> 00:10:03,360
‫Bene.

140
00:10:03,370 --> 00:10:05,050
‫Sono tornato qui nell'editor.

141
00:10:05,080 --> 00:10:09,440
‫Andiamo avanti e premiamo play e dai un'occhiata.

142
00:10:09,460 --> 00:10:11,460
‫Questo è fantastico.

143
00:10:11,470 --> 00:10:12,910
‫Posso ancora rotolare.

144
00:10:12,910 --> 00:10:18,910
‫Posso muovere il mouse e la torretta ruota ovunque sposto il cursore del mouse.

145
00:10:18,910 --> 00:10:20,350
‫Quindi questo è fantastico.

146
00:10:20,600 --> 00:10:25,750
‫Ok, quindi prima di concludere, vorrei solo affrontare un paio di questioni.

147
00:10:25,750 --> 00:10:28,900
‫Voglio che sia bello, lucido e bello da vedere.

148
00:10:28,930 --> 00:10:35,680
‫Ora, il primo problema si verifica quando sposto il cursore del mouse vicino al centro del serbatoio e

149
00:10:35,680 --> 00:10:36,890
‫poi lo attraverso.

150
00:10:36,910 --> 00:10:42,670
‫Vedrai che ad un certo punto quella sorta di rotazione scatta molto rapidamente.

151
00:10:42,670 --> 00:10:48,250
‫E se spostiamo il mouse in modo casuale, beh, non sembra molto bello.

152
00:10:48,250 --> 00:10:49,480
‫Sta scattando.

153
00:10:49,480 --> 00:10:50,890
‫Non abbiamo movimenti fluidi.

154
00:10:50,890 --> 00:10:52,270
‫Quindi questo è un problema.

155
00:10:52,300 --> 00:10:59,890
‫Ora, l'altro problema è che se clicco e giro e salgo fino al bordo, vedrò che la mia torretta scatta

156
00:10:59,890 --> 00:11:03,750
‫nell'altra direzione quando sposto il cursore del mouse verso l'alto.

157
00:11:03,760 --> 00:11:05,730
‫Allora cosa sta succedendo lì?

158
00:11:05,740 --> 00:11:06,910
‫Bene, scopriamolo.

159
00:11:06,910 --> 00:11:10,240
‫Torneremo a VS Code e vorrei riavere la mia sfera di debug.

160
00:11:10,240 --> 00:11:16,240
‫Quindi, qui in Tank, andrò alla funzione tick subito prima di ruotare la torretta e

161
00:11:16,240 --> 00:11:19,240
‫ancora una volta chiamerò draw debug sphere.

162
00:11:19,450 --> 00:11:26,380
‫Ora per il mondo in cui sto passando per ottenere il mondo per il centro sto passando nel punto di

163
00:11:26,380 --> 00:11:35,350
‫impatto del punto per il raggio userò 25 segmenti F di punti possono essere 12, il colore può essere F colore rosso le linee persistenti possono

164
00:11:35,350 --> 00:11:38,440
‫essere false e la vita può essere negativa.

165
00:11:38,440 --> 00:11:40,480
‫Quindi la stessa cosa che abbiamo fatto prima.

166
00:11:40,690 --> 00:11:42,280
‫Quindi salverò questo avviso.

167
00:11:42,280 --> 00:11:48,700
‫Non sto aggiungendo il file di intestazione di nuovo lì e questo perché gli helper di debug sono effettivamente inclusi per impostazione

168
00:11:48,700 --> 00:11:50,830
‫predefinita, quindi tecnicamente non ne abbiamo bisogno.

169
00:11:50,830 --> 00:11:56,740
‫Salverò solo il salto indietro nell'editor, eseguirò un kickoff di codifica dal vivo e premi play.

170
00:11:56,740 --> 00:11:58,600
‫Quindi ora ho la mia sfera di debug.

171
00:11:58,600 --> 00:12:05,320
‫Quindi andiamo fino al confine del mondo e io sposterò il cursore del mouse fino al punto

172
00:12:05,320 --> 00:12:07,240
‫in cui cade nell'abisso.

173
00:12:07,240 --> 00:12:10,330
‫Ed è qui che abbiamo il problema.

174
00:12:10,330 --> 00:12:15,940
‫Vedete, non abbiamo un risultato di successo sotto il cursore quando il nostro cursore si sposta lassù perché non c'è niente

175
00:12:15,940 --> 00:12:18,730
‫lì per noi da cui ottenere un risultato di successo.

176
00:12:18,730 --> 00:12:22,120
‫Pertanto, il nostro punto di impatto non è definito.

177
00:12:22,120 --> 00:12:25,570
‫Quindi ciò di cui abbiamo bisogno è qualcosa che colpisca quella traccia di linea.

178
00:12:25,600 --> 00:12:28,810
‫Ora, Unreal Engine ha molti strumenti che possiamo usare.

179
00:12:28,810 --> 00:12:35,170
‫Quello che farò è fare clic sul menu a discesa qui in alto e aprire il pannello dell'attore del mio posto e selezionare

180
00:12:35,170 --> 00:12:38,380
‫questa icona che dice volumi e ottenere un volume di blocco.

181
00:12:38,380 --> 00:12:39,820
‫Ecco il blocco del volume.

182
00:12:39,820 --> 00:12:41,710
‫Ne trascinerò uno dentro.

183
00:12:41,740 --> 00:12:44,020
‫Quindi ora ho questo volume di blocco.

184
00:12:44,110 --> 00:12:48,190
‫Ora, per impostazione predefinita, i volumi di blocco dovrebbero essere invisibili.

185
00:12:48,190 --> 00:12:54,130
‫Se vado al pannello dei dettagli per questo e scorro verso il basso fino a

186
00:12:54,130 --> 00:13:00,940
‫collisione, vedo che è Collision Presets is Invisible Wall, il che sembra suggerire che dovrebbe bloccare quasi tutto.

187
00:13:00,940 --> 00:13:06,610
‫L'unica cosa che non sta bloccando è il canale di visibilità e la nostra traccia di linea sembra

188
00:13:06,610 --> 00:13:08,680
‫tracciare contro il canale di visibilità.

189
00:13:08,680 --> 00:13:13,630
‫Tutto ciò che nel nostro mondo blocca il canale di visibilità sarà colpito dalla nostra traccia di linea.

190
00:13:13,630 --> 00:13:16,540
‫Ma questo particolare volume non lo farà.

191
00:13:16,540 --> 00:13:17,860
‫Dovrebbe essere invisibile.

192
00:13:17,860 --> 00:13:22,690
‫Bene, possiamo andare ai preset di collisione, aprire il menu a discesa e selezionare personalizzato.

193
00:13:22,720 --> 00:13:28,300
‫Questo ci consentirà di cambiarlo in modo da poter impostare la risposta alla collisione sul canale di visibilità.

194
00:13:28,300 --> 00:13:29,170
‫È un blocco.

195
00:13:29,170 --> 00:13:34,960
‫Quindi ora ho un volume invisibile, ma è impostato per bloccare il canale di visibilità, il che significa che

196
00:13:34,960 --> 00:13:40,180
‫le tracce di linea che tracciano contro il canale di visibilità come il nostro lo colpiranno.

197
00:13:40,180 --> 00:13:45,580
‫Quindi quello che posso fare è prendere questo volume di blocco e scalarlo.

198
00:13:45,580 --> 00:13:47,800
‫Lo metterò appena oltre il muro.

199
00:13:47,800 --> 00:13:53,440
‫In effetti, posso posizionarlo proprio qui, ai limiti del muro, e lo abbasso un po' in

200
00:13:53,440 --> 00:13:55,900
‫modo che si sovrapponga al muro.

201
00:13:55,900 --> 00:14:01,930
‫E in questo modo abbiamo questa barriera invisibile qui, e andrò avanti e la aumenterò

202
00:14:01,930 --> 00:14:03,550
‫anche nella direzione Y.

203
00:14:03,550 --> 00:14:09,880
‫Quindi lo prenderò bello e grande e lo posizionerò nel mezzo qui e gli darò un po' di imbottitura.

204
00:14:09,880 --> 00:14:14,050
‫E lo aumenterò anche nella direzione Z.

205
00:14:14,050 --> 00:14:18,460
‫Quindi ora è bello e grande e la nostra traccia di linea dovrebbe colpirlo.

206
00:14:18,460 --> 00:14:20,080
‫Quindi testiamo quella teoria.

207
00:14:20,110 --> 00:14:23,170
‫Facciamo clic nella finestra e saliamo al muro.

208
00:14:23,170 --> 00:14:30,250
‫E abbastanza sicuro, sto colpendo quel volume di blocco con la mia traccia di linea e non ho quel problema in

209
00:14:30,250 --> 00:14:34,240
‫cui la mia torretta si blocca per guardare una posizione indefinita.

210
00:14:34,240 --> 00:14:40,810
‫Probabilmente sta guardando verso l'origine del mondo perché quel vettore del punto di impatto è tutto zero.

211
00:14:40,810 --> 00:14:43,660
‫Ora, se salgo su questo muro, ho lo stesso problema.

212
00:14:43,660 --> 00:14:46,270
‫Quindi abbiamo bisogno di questi volumi di blocco.

213
00:14:46,600 --> 00:14:48,950
‫Tutto intorno al perimetro del nostro livello.

214
00:14:48,970 --> 00:14:50,590
‫Ora, può essere abbastanza facile.

215
00:14:50,590 --> 00:14:54,820
‫Tutto quello che devo fare è duplicare questo volume di blocco.

216
00:14:54,820 --> 00:14:59,290
‫Ora posso passare dalla vista prospettica alla vista ortogonale dall'alto.

217
00:14:59,290 --> 00:15:06,070
‫Quindi selezionerò la parte superiore e scorrerò verso l'esterno con la rotellina del mouse e semplicemente tieni premuto alt e duplirò

218
00:15:06,070 --> 00:15:11,620
‫questo muro e ne posizionerò uno qui e posso premere E per entrare in modalità di rotazione.

219
00:15:11,620 --> 00:15:14,740
‫Quindi terrò premuto alt e ruoterò di 90 gradi.

220
00:15:14,740 --> 00:15:21,010
‫Questo mi darà una copia e poi premetterò il doppio u e farò partire la mia modalità di traduzione e lo

221
00:15:21,010 --> 00:15:26,920
‫sposterò qui su questo lato e tieni premuto Alt e trascinerò una copia verso il basso da quel lato.

222
00:15:26,920 --> 00:15:28,720
‫Quindi ora abbiamo quattro mura.

223
00:15:28,720 --> 00:15:34,990
‫Ora posso tornare dalla vista dall'alto alla prospettiva e premere play, e ora posso salire su uno

224
00:15:34,990 --> 00:15:40,240
‫qualsiasi di questi muri e non importa quale muro sono coperto, quindi sembra fantastico.

225
00:15:40,240 --> 00:15:42,340
‫In modo che si occupi di uno dei nostri problemi.

226
00:15:42,340 --> 00:15:43,720
‫Ma che dire di quest'altro?

227
00:15:43,720 --> 00:15:49,360
‫Se spostiamo il mouse vicino al nostro carro armato, abbiamo ancora questo comportamento sporadico.

228
00:15:49,360 --> 00:15:51,880
‫Quindi vorrei occuparmi anche di questo.

229
00:15:51,880 --> 00:15:56,770
‫Ora, il modo in cui posso occuparmene è interpolando quella rotazione.

230
00:15:56,770 --> 00:16:02,650
‫Quindi, invece di impostare direttamente questo valore di rotazione, possiamo utilizzare una funzione

231
00:16:02,650 --> 00:16:08,740
‫di interpolazione che essenzialmente sposterà quella rotazione verso l'obiettivo che forniamo in modo fluido.

232
00:16:08,740 --> 00:16:10,270
‫Quindi vediamo come funziona.

233
00:16:10,270 --> 00:16:15,970
‫Ora, vorrei che questa interpolazione fosse nella nostra funzione di rotazione della torretta in modo da poter

234
00:16:15,970 --> 00:16:22,750
‫tornare al pedone di base in basso per ruotare la torretta, e invece di impostare la rotazione del nostro mondo affinché

235
00:16:22,750 --> 00:16:28,240
‫la torretta guardi la rotazione, possiamo impostarla uguale al valore restituito da una funzione di interpolazione.

236
00:16:28,240 --> 00:16:34,720
‫Quindi eliminerò, guarderò la rotazione e invece chiameremo una funzione sulla libreria

237
00:16:34,720 --> 00:16:38,590
‫matematica F chiamata R inter two.

238
00:16:39,100 --> 00:16:44,530
‫Ora il nostro in due è progettato per gestire l'interpolazione per i rotatori.

239
00:16:44,530 --> 00:16:49,720
‫Ora il suo primo parametro di input è un riferimento del rotatore const F chiamato corrente.

240
00:16:49,720 --> 00:16:53,650
‫Questo è il valore attuale della cosa che stiamo cercando di cambiare.

241
00:16:53,650 --> 00:16:59,560
‫La cosa che stiamo cercando di cambiare è la nostra rotazione delle torrette e possiamo ottenerla dalla nostra maglia della torretta.

242
00:16:59,560 --> 00:17:05,920
‫Quindi diremo mesh della torretta e la funzione che vogliamo usare è ottenere la rotazione dei componenti.

243
00:17:05,920 --> 00:17:10,420
‫Quindi è molto simile a ottenere la posizione del componente solo che sta ottenendo la rotazione.

244
00:17:10,420 --> 00:17:14,200
‫Ora il prossimo input è un rotatore F chiamato Target.

245
00:17:14,200 --> 00:17:15,310
‫Questo è il valore.

246
00:17:15,310 --> 00:17:21,430
‫Vogliamo che questa rotazione della mesh della torretta interpreti per avvicinarsi senza intoppi.

247
00:17:21,430 --> 00:17:23,890
‫Questo sarà il nostro sguardo alla rotazione.

248
00:17:23,890 --> 00:17:26,620
‫Quindi dirò di guardare la rotazione.

249
00:17:26,620 --> 00:17:28,630
‫Il prossimo input è il tempo delta.

250
00:17:28,630 --> 00:17:30,640
‫Quindi conosciamo l'importanza del tempo Delta.

251
00:17:30,640 --> 00:17:37,030
‫Se spostiamo oggetti o ruotiamo oggetti, vogliamo che il movimento sia indipendente dal frame rate.

252
00:17:37,030 --> 00:17:39,700
‫Quindi, per questo, possiamo ottenere il tempo Delta.

253
00:17:39,700 --> 00:17:46,210
‫Posso semplicemente includere le statistiche di gioco e se hai una buona memoria, ricorderai che l'inclusione

254
00:17:46,210 --> 00:17:49,150
‫è la statica di gioco kismet slash.

255
00:17:49,150 --> 00:17:57,700
‫Quindi otterrò le statistiche di gioco qui in modo da poter accedere alla funzione statica, ottenere secondi delta del mondo e

256
00:17:57,700 --> 00:18:01,150
‫ricordare che ciò richiede un oggetto contesto mondiale.

257
00:18:01,150 --> 00:18:04,030
‫Quindi passerò questo in quello.

258
00:18:04,030 --> 00:18:06,340
‫E infine, abbiamo bisogno di una velocità interna.

259
00:18:06,340 --> 00:18:12,280
‫Maggiore è il valore della velocità interna, più velocemente interpoleremo verso il target.

260
00:18:12,280 --> 00:18:18,550
‫Quindi, se lo imposto su un valore, diciamo, cinque F, allora interpoleremo abbastanza lentamente.

261
00:18:18,580 --> 00:18:20,470
‫Vediamo come appare ora.

262
00:18:20,470 --> 00:18:25,030
‫Tutto questo è su una singola riga e scorre fuori dallo schermo.

263
00:18:25,030 --> 00:18:32,440
‫Quindi quello che farò è posizionare l'input per impostare la rotazione del mondo sulla propria linea in questo modo.

264
00:18:32,440 --> 00:18:34,060
‫Quindi proprio così.

265
00:18:34,060 --> 00:18:39,820
‫E poi il nostro interprete, che ha questi quattro parametri di input anche fuori dallo schermo.

266
00:18:39,820 --> 00:18:43,270
‫Quindi li metterò ciascuno sulle proprie linee.

267
00:18:43,270 --> 00:18:49,420
‫In questo modo possiamo vedere tutti gli input senza dover scorrere lo schermo in quel modo.

268
00:18:49,420 --> 00:18:49,840
‫Tutto bene.

269
00:18:49,840 --> 00:18:54,220
‫Andrò avanti e lo salverò e avvierò la codifica dal vivo.

270
00:18:54,220 --> 00:19:01,480
‫E ora se premo play e sposto il mouse, nota che ci vuole del tempo prima che avvenga quella rotazione.

271
00:19:01,480 --> 00:19:06,430
‫Questo perché stiamo agevolmente interpolando verso quella rotazione del bersaglio.

272
00:19:06,430 --> 00:19:07,780
‫Ora, questo è fantastico.

273
00:19:07,780 --> 00:19:09,340
‫È esattamente quello che volevo.

274
00:19:09,340 --> 00:19:14,950
‫Non importa come muovo il mouse, non avrò mai quel movimento scattante, a scatti e sporadico.

275
00:19:15,040 --> 00:19:20,170
‫Ora, cinque è una velocità Internet terribilmente lenta, ma possiamo cambiarla.

276
00:19:20,170 --> 00:19:21,820
‫Possiamo renderlo un po' più veloce.

277
00:19:21,820 --> 00:19:28,420
‫Lo imposterò su 25, vedrò come appare e ti lascerò andare avanti e decidere il valore che ti piace

278
00:19:28,420 --> 00:19:30,040
‫per il tuo gioco.

279
00:19:30,040 --> 00:19:34,450
‫Quindi ancora una volta, dando il via alla codifica dal vivo e premendo play.

280
00:19:34,510 --> 00:19:39,010
‫Ora ho un'interpolazione abbastanza veloce, ma non scatta.

281
00:19:39,010 --> 00:19:42,910
‫È ancora veloce, ma non è uno scatto istantaneo.

282
00:19:42,910 --> 00:19:46,360
‫Quindi, finché non faremo qualcosa del genere, beh, non lo otterremo.

283
00:19:46,540 --> 00:19:47,860
‫Comportamento pazzo.

284
00:19:47,860 --> 00:19:53,500
‫E, naturalmente, se vuoi una rotazione più lenta, sai come farlo ora e abbiamo finito con il disegno della

285
00:19:53,500 --> 00:19:56,220
‫sfera di debug, quindi andrò avanti e lo rimuoverò.

286
00:19:56,230 --> 00:19:56,650
‫Bene.

287
00:19:56,650 --> 00:20:02,920
‫Quindi, in sintesi, abbiamo impostato la rotazione della torretta e diamo un'occhiata a Target, che è un vettore

288
00:20:02,920 --> 00:20:05,800
‫F corrispondente a un punto nel mondo.

289
00:20:05,800 --> 00:20:08,080
‫In questo momento stiamo solo usando il risultato di traccia hit.

290
00:20:08,110 --> 00:20:13,090
‫Ora abbiamo inserito questa funzione nella classe base pong e l'abbiamo protetta, il che significa che siamo stati

291
00:20:13,090 --> 00:20:15,880
‫in grado di ereditare la funzione nella classe tank.

292
00:20:15,880 --> 00:20:21,190
‫E una volta che siamo pronti per creare una classe torre basata sulla base, allora quella classe

293
00:20:21,190 --> 00:20:24,610
‫torre erediterà questa funzione di rotazione torretta e possiamo riutilizzarla.

294
00:20:24,610 --> 00:20:26,050
‫Tutto quello che dobbiamo fare è passare.

295
00:20:26,050 --> 00:20:31,750
‫In un nuovo sguardo a Target, lavoreremo sulla creazione di una classe tower derivata da base -- nelle prossime

296
00:20:31,750 --> 00:20:32,380
‫lezioni.

297
00:20:32,380 --> 00:20:33,250
‫Ci vediamo presto.

