﻿1
00:00:04,080 --> 00:00:05,730
‫Olá e bem-vindo de volta.

2
00:00:05,760 --> 00:00:10,380
‫Agora estamos prontos para girar a torre e gostaríamos de fazer isso usando o mouse.

3
00:00:10,380 --> 00:00:14,790
‫E esse local de acerto do acerto de rastreamento que fizemos no vídeo anterior.

4
00:00:14,880 --> 00:00:22,200
‫Então, enquanto estou movendo o cursor do mouse, a torre está girando e voltada para a direção do cursor do mouse.

5
00:00:22,320 --> 00:00:28,110
‫E mesmo quando clico na janela de visualização e começo a jogar, ainda posso mover o cursor do

6
00:00:28,110 --> 00:00:31,080
‫mouse para girar a torre e definir sua direção.

7
00:00:31,110 --> 00:00:35,850
‫Isso me permitirá mirar quando tiver a capacidade de disparar projéteis.

8
00:00:35,880 --> 00:00:36,200
‫OK.

9
00:00:36,240 --> 00:00:41,770
‫Então, para conseguir isso, precisamos encontrar a direção para a qual queremos que nossa torre aponte.

10
00:00:41,790 --> 00:00:46,410
‫E uma vez que encontramos essa direção, podemos definir a rotação da malha da torre.

11
00:00:46,500 --> 00:00:52,470
‫Agora, para obter a direção que gostaríamos que a torre apontasse, precisamos fazer um pouco de

12
00:00:52,470 --> 00:00:53,500
‫matemática vetorial.

13
00:00:53,520 --> 00:00:59,570
‫O que estamos procurando é um vetor da torre do tanque até o local de acerto do rastreamento.

14
00:00:59,580 --> 00:01:05,940
‫Agora podemos obter facilmente a localização do nosso tanque ou de qualquer um de seus componentes, como a localização da

15
00:01:05,940 --> 00:01:06,960
‫torre do tanque.

16
00:01:06,990 --> 00:01:09,600
‫Chamaremos este local de torre, local.

17
00:01:09,600 --> 00:01:13,440
‫E também sabemos como podemos obter a localização da cabeça de rastreamento.

18
00:01:13,470 --> 00:01:15,800
‫Chamaremos esse local de acerto de rastreamento.

19
00:01:15,810 --> 00:01:20,760
‫O que nos interessa é o vetor da localização da torre para rastrear a localização do acerto.

20
00:01:20,760 --> 00:01:23,100
‫Chamaremos este vetor de alvo.

21
00:01:23,130 --> 00:01:27,030
‫Agora, a matemática vetorial para chegar ao alvo é bem simples.

22
00:01:27,060 --> 00:01:33,120
‫Para obter um vetor de um ponto inicial para um ponto final é sempre o ponto final menos o ponto inicial.

23
00:01:33,420 --> 00:01:39,270
‫Então, se pegarmos nosso traço, acertar a localização e subtrair a localização da torre do vetor, então o

24
00:01:39,270 --> 00:01:41,620
‫vetor que resulta disso é o alvo.

25
00:01:41,640 --> 00:01:47,160
‫Agora, uma vez que temos o vetor de direção de dois alvos, queremos convertê-lo em uma rotação para que

26
00:01:47,160 --> 00:01:49,530
‫possamos definir a rotação da torre do tanque.

27
00:01:49,530 --> 00:01:53,750
‫E o tipo vetorial tem uma função embutida chamada rotação.

28
00:01:53,760 --> 00:02:01,230
‫Então, se pegarmos nosso vetor de destino e chamá-lo de rotação, isso retornará um rotador F correspondente a

29
00:02:01,230 --> 00:02:02,260
‫essa direção.

30
00:02:02,280 --> 00:02:04,430
‫Agora precisamos ter algo em mente.

31
00:02:04,440 --> 00:02:11,160
‫O resultado do acerto do rastreamento geralmente será no chão e o vetor da torre do tanque para o resultado

32
00:02:11,160 --> 00:02:14,620
‫do acerto do rastreamento não será paralelo ao solo.

33
00:02:14,640 --> 00:02:20,850
‫Isso significa que, se definirmos a rotação da torre do tanque para o rotador que obtemos desse vetor de direção,

34
00:02:20,850 --> 00:02:26,790
‫podemos obter algo assim, onde a torre está inclinada para baixo em direção ao solo, mas não queremos que

35
00:02:26,790 --> 00:02:29,310
‫a torre do tanque gire para baixo.

36
00:02:29,310 --> 00:02:31,350
‫Queremos que ainda aponte para a frente.

37
00:02:31,350 --> 00:02:33,780
‫Então esse é o resultado que queremos.

38
00:02:33,810 --> 00:02:39,180
‫Em outras palavras, queremos apenas alterar o componente sim da rotação da torre do tanque.

39
00:02:39,180 --> 00:02:44,550
‫Assim, ele está apontando na direção correta, mas ainda permanece paralelo ao solo.

40
00:02:44,550 --> 00:02:51,060
‫Nós apenas mudamos sua guinada, então vamos voltar ao código VS e criar uma função para girar a torre do

41
00:02:51,060 --> 00:02:51,600
‫tanque.

42
00:02:51,630 --> 00:02:57,210
‫Agora vamos girar a torre no tanque, mas também gostaríamos de girar a torre em

43
00:02:57,210 --> 00:03:04,290
‫nossa torre inimiga e a torre em breve será criada derivada da base pon, o que significa que se

44
00:03:04,290 --> 00:03:08,820
‫criarmos uma torre giratória podemos colocá-la aqui na classe base pong.

45
00:03:08,820 --> 00:03:12,930
‫Assim, tanto o tanque quanto a torre herdarão essa função.

46
00:03:12,930 --> 00:03:18,480
‫Como planejamos usá-lo tanto na torre quanto no tanque, podemos proteger essa função.

47
00:03:18,720 --> 00:03:24,630
‫Então, vou adicionar uma seção protegida e quaisquer funções e variáveis que colocarmos na seção protegida

48
00:03:24,630 --> 00:03:29,220
‫estarão acessíveis nessas classes filhas, mas não em nenhuma outra classe.

49
00:03:29,220 --> 00:03:32,580
‫Portanto, é quase tão restrito quanto as variáveis privadas.

50
00:03:32,580 --> 00:03:34,860
‫Agora esta função pode retornar void.

51
00:03:34,860 --> 00:03:37,710
‫Vou chamar isso de torre giratória.

52
00:03:38,850 --> 00:03:44,690
‫E para girar a torre, vou precisar de uma espécie de destino para olhar.

53
00:03:44,700 --> 00:03:49,620
‫Isso pode ser um vetor f e podemos chamar isso de olhar para o alvo.

54
00:03:49,620 --> 00:03:56,490
‫Portanto, a ideia é que se tivermos uma função que possamos passar em algum tipo de local do mundo, a função

55
00:03:56,490 --> 00:04:00,360
‫deve resultar na rotação da torre em direção a esse local.

56
00:04:00,360 --> 00:04:04,680
‫Então vamos em frente e fornecer uma definição de função para girar a torre.

57
00:04:04,680 --> 00:04:11,280
‫Então aqui no peão base CP logo abaixo do construtor, vou implementar a torre rotativa.

58
00:04:11,280 --> 00:04:16,680
‫E é claro que eu preciso de um nome de classe de peão base com o operador de resolução de escopo aqui.

59
00:04:16,680 --> 00:04:21,180
‫Agora que eu girei a torre, vamos pensar em como vamos implementar isso.

60
00:04:21,180 --> 00:04:28,320
‫A primeira coisa que precisamos é que, para direcionar o vetor, o vetor do componente da torre para o resultado de acerto do traço

61
00:04:28,320 --> 00:04:30,120
‫sob o cursor do mouse.

62
00:04:30,120 --> 00:04:38,070
‫Então este pode ser um vetor F local chamado para target e vamos defini-lo igual ao resultado de alguma

63
00:04:38,070 --> 00:04:38,970
‫matemática vetorial.

64
00:04:38,970 --> 00:04:43,350
‫Lembre-se, será o destino menos o ponto de partida.

65
00:04:43,350 --> 00:04:50,910
‫E o destino é olhar para o alvo e o ponto de partida será a localização da torre do tanque,

66
00:04:50,910 --> 00:04:54,030
‫ou seja, a localização da malha da torre.

67
00:04:54,030 --> 00:04:59,880
‫Assim, podemos dizer malha da torre e podemos obter a localização da malha da torre.

68
00:04:59,880 --> 00:05:07,290
‫Agora, a maneira de obter a localização mundial de um componente é com esta função obter a localização do componente.

69
00:05:07,290 --> 00:05:09,630
‫Pertence à classe de componente de cena de uso.

70
00:05:09,630 --> 00:05:11,460
‫Portanto, todos os componentes de cena têm isso.

71
00:05:11,460 --> 00:05:15,690
‫Então, a partir da malha da torre, chamaremos a localização do componente.

72
00:05:16,340 --> 00:05:23,600
‫Então olhe para o alvo menos a localização da malha da torre nos dá o vetor da malha da torre para o alvo

73
00:05:23,600 --> 00:05:24,290
‫de observação.

74
00:05:24,320 --> 00:05:30,590
‫Agora, como mencionei, podemos obter um rotador EF do destino usando a função de rotação de vetores F.

75
00:05:30,590 --> 00:05:37,100
‫Então vamos fazer um rotador F e podemos chamar isso de olhar para rotação e vamos definir

76
00:05:37,100 --> 00:05:40,100
‫isso igual a rotação do ponto alvo.

77
00:05:40,280 --> 00:05:41,570
‫Isso é uma chamada de função.

78
00:05:41,570 --> 00:05:46,700
‫Então agora temos o rotador correspondente a este vetor de direção alvo.

79
00:05:46,700 --> 00:05:49,550
‫Mas a questão é que só nos preocupamos com o YA.

80
00:05:49,550 --> 00:05:51,680
‫Não queremos mudar o tom ou o papel.

81
00:05:51,680 --> 00:05:57,290
‫Queremos apenas girar a torre em torno do eixo z e mantê-la paralela ao solo.

82
00:05:57,290 --> 00:05:59,420
‫Agora podemos fazer isso de várias maneiras.

83
00:05:59,420 --> 00:06:05,870
‫Por um lado, podemos dar uma olhada na rotação, pitch e zerar isso.

84
00:06:05,870 --> 00:06:08,180
‫Em outras palavras, defina-o igual a zero.

85
00:06:08,210 --> 00:06:14,240
‫Também podemos dar uma olhada no papel do ponto de rotação e zerar isso também.

86
00:06:14,240 --> 00:06:21,020
‫Agora, depois de definir pitch and roll para zero, temos a rotação que queremos, que é apenas o componente.

87
00:06:21,020 --> 00:06:22,460
‫Esta é uma maneira de fazê-lo.

88
00:06:22,460 --> 00:06:26,450
‫Outra seria usar uma das sobrecargas do construtor do rotador F.

89
00:06:26,450 --> 00:06:34,820
‫Se dissermos f rotator com parênteses e passamos alguns valores como zero ponto F para o primeiro e o pop-up está me

90
00:06:34,820 --> 00:06:38,300
‫dizendo que essa primeira entrada é o tom.

91
00:06:38,300 --> 00:06:43,880
‫E então para o ya podemos usar para direcionar a rotação.

92
00:06:44,330 --> 00:06:44,990
‫Sim.

93
00:06:44,990 --> 00:06:47,960
‫E então, para o papel, poderíamos usar zero ponto F.

94
00:06:47,960 --> 00:06:55,820
‫Agora o que isso faz é criar um novo rotador F com zero para o passo, zero para o papel e o

95
00:06:55,820 --> 00:06:59,420
‫componente do rotador retornado por duas rotações de destino.

96
00:06:59,420 --> 00:07:05,300
‫Então o valor retornado por isso nos daria o mesmo resultado que fizemos aqui com essas três linhas.

97
00:07:05,300 --> 00:07:11,990
‫Então, como isso é um pouco mais compacto e elegante, acho que prefiro usar isso para que

98
00:07:11,990 --> 00:07:19,370
‫possamos inicializar a aparência do vetor de rotação com o rotador F retornado chamando o construtor do rotador F assim.

99
00:07:19,370 --> 00:07:21,380
‫Então eu vou remover essa linha aqui embaixo.

100
00:07:21,380 --> 00:07:23,360
‫E agora olhamos para a rotação.

101
00:07:23,360 --> 00:07:29,000
‫Agora, a última coisa a fazer nesta função é definir a rotação para o mosto da torre.

102
00:07:29,000 --> 00:07:36,440
‫Agora podemos definir a rotação para um determinado componente usando esta função definir a rotação do mundo novamente, ela pertence ao

103
00:07:36,440 --> 00:07:38,270
‫uso do componente de cena.

104
00:07:38,270 --> 00:07:44,300
‫E a razão pela qual estamos usando a rotação de palavra definida em vez de adicionar algum tipo de deslocamento de

105
00:07:44,300 --> 00:07:50,420
‫rotação local é porque temos uma rotação no espaço do mundo dois alvo é um vetor de direção do espaço do mundo.

106
00:07:50,420 --> 00:07:56,000
‫Estamos pegando a localização da malha da torre no espaço do mundo e subtraindo a visão da localização do alvo no espaço

107
00:07:56,000 --> 00:07:56,750
‫do mundo.

108
00:07:56,750 --> 00:07:58,850
‫Portanto, esta é uma direção espacial mundial.

109
00:07:58,850 --> 00:08:02,450
‫Portanto, o olhar para a rotação é uma rotação do espaço mundial.

110
00:08:02,450 --> 00:08:06,140
‫Então, vamos usar a rotação definida do mundo na malha da torre.

111
00:08:06,290 --> 00:08:13,280
‫Então vamos dizer malha de torre, definir a rotação do mundo e vamos olhar para a rotação.

112
00:08:13,280 --> 00:08:19,550
‫Então agora temos uma função que pode pegar qualquer alvo no mundo e girar a malha da torre para olhar para

113
00:08:19,550 --> 00:08:22,550
‫ele, mas não irá girar a malha para baixo.

114
00:08:22,550 --> 00:08:28,100
‫Ele só vai mudar sua guinada, então ele vai girar de uma maneira que uma torre de tanque deve girar.

115
00:08:28,100 --> 00:08:31,100
‫Então agora temos uma função para girar a torre.

116
00:08:31,130 --> 00:08:36,980
‫Vou desafiá-lo a chamar esta função para definir a rotação da torre, chame a função de rotação

117
00:08:36,980 --> 00:08:38,870
‫da torre na classe tanque.

118
00:08:38,870 --> 00:08:40,730
‫Esta é uma função protegida.

119
00:08:40,730 --> 00:08:43,070
‫Então a classe tanque tem acesso a ele.

120
00:08:43,070 --> 00:08:49,220
‫Agora girar a torre leva um vetor F, o olhar no alvo, você vai usar esse ponto de impacto no resultado

121
00:08:49,220 --> 00:08:51,410
‫F hit do nosso traço de linha.

122
00:08:51,410 --> 00:08:57,170
‫Então, vou deixar para você encontrar o lugar correto no código para chamar essa função.

123
00:08:57,410 --> 00:09:00,920
‫Então pause o vídeo e coloque a função de rotação da torre.

124
00:09:00,920 --> 00:09:02,870
‫Chame a classe do tanque.

125
00:09:06,000 --> 00:09:06,150
‫OK.

126
00:09:06,300 --> 00:09:09,960
‫Então temos nossa função de rotação da torre e estamos prontos para chamá-la.

127
00:09:10,140 --> 00:09:18,200
‫Vou entrar no tanque e aqui está a minha função tick dentro do if check for player controller ref.

128
00:09:18,210 --> 00:09:24,870
‫Eu tenho meu resultado de acerto e depois que um resultado de obtenção de acerto sob o cursor foi chamado, o resultado de acerto

129
00:09:24,870 --> 00:09:25,860
‫terá dados válidos.

130
00:09:25,860 --> 00:09:30,480
‫Na verdade, estamos usando esse ponto de impacto de resultado de acerto e desenhar a esfera de depuração.

131
00:09:30,510 --> 00:09:35,370
‫Agora, como não preciso mais desenhar a esfera de depuração, vou em frente e excluí-la.

132
00:09:35,370 --> 00:09:39,900
‫E, em vez disso, vou chamar nossa função protegida de rotação de torre.

133
00:09:39,900 --> 00:09:45,750
‫E para olhar o alvo, vou passar no ponto de impacto do resultado do acerto.

134
00:09:47,140 --> 00:09:53,320
‫Então, agora, a cada quadro, vamos girar a torre em direção ao ponto de impacto do nosso resultado de acerto.

135
00:09:53,350 --> 00:09:59,050
‫Agora, antes de compilar isso, não estou mais usando auxiliares de depuração de desenho, então vou em frente e remover esse

136
00:09:59,050 --> 00:10:00,130
‫arquivo de cabeçalho.

137
00:10:00,340 --> 00:10:00,820
‫OK.

138
00:10:00,850 --> 00:10:02,590
‫Agora estou pronto para compilar.

139
00:10:02,970 --> 00:10:03,360
‫OK.

140
00:10:03,370 --> 00:10:05,050
‫Estou de volta aqui no editor.

141
00:10:05,080 --> 00:10:09,440
‫Vamos em frente e aperte o play e confira.

142
00:10:09,460 --> 00:10:11,460
‫Isso é incrível.

143
00:10:11,470 --> 00:10:12,910
‫Eu ainda posso rolar.

144
00:10:12,910 --> 00:10:18,910
‫Eu posso mover meu mouse e a torre está girando onde quer que eu mova o cursor do mouse.

145
00:10:18,910 --> 00:10:20,350
‫Então isso é incrível.

146
00:10:20,600 --> 00:10:25,750
‫Ok, então antes de encerrarmos isso, gostaria de abordar apenas algumas questões.

147
00:10:25,750 --> 00:10:28,900
‫Eu quero que isso seja agradável e polido e com ótima aparência.

148
00:10:28,930 --> 00:10:35,680
‫Agora, o primeiro problema acontece quando eu movo o cursor do mouse para perto do centro do tanque e depois

149
00:10:35,680 --> 00:10:36,890
‫passo por ele.

150
00:10:36,910 --> 00:10:42,670
‫Você verá que em algum momento essa rotação se encaixa muito rapidamente.

151
00:10:42,670 --> 00:10:48,250
‫E se movermos o mouse de maneira aleatória, bem, isso não parece muito bom.

152
00:10:48,250 --> 00:10:49,480
‫Está estalando.

153
00:10:49,480 --> 00:10:50,890
‫Não temos movimento suave.

154
00:10:50,890 --> 00:10:52,270
‫Então essa é uma questão.

155
00:10:52,300 --> 00:10:59,890
‫Agora, o outro problema é se eu clicar e rolar e for até a borda, verei que minha torreta se encaixa na

156
00:10:59,890 --> 00:11:03,750
‫outra direção quando movo o cursor do mouse para cima.

157
00:11:03,760 --> 00:11:05,730
‫Então o que está acontecendo lá?

158
00:11:05,740 --> 00:11:06,910
‫Bem, vamos descobrir.

159
00:11:06,910 --> 00:11:10,240
‫Voltaremos ao VS Code e gostaria de recuperar minha esfera de depuração.

160
00:11:10,240 --> 00:11:16,240
‫Então, de volta aqui no Tank, vou para a função tick logo antes de girar a torre e

161
00:11:16,240 --> 00:11:19,240
‫mais uma vez vou chamar draw debug sphere.

162
00:11:19,450 --> 00:11:26,380
‫Agora para o mundo que estou passando em obter mundo para o centro estou passando no resultado do acerto ponto

163
00:11:26,380 --> 00:11:35,350
‫ponto de impacto para o raio vou usar 25 pontos F segmentos podem ser 12, cor pode ser F cor vermelha linhas persistentes podem ser falsas

164
00:11:35,350 --> 00:11:38,440
‫e o tempo de vida pode ser negativo.

165
00:11:38,440 --> 00:11:40,480
‫Então a mesma coisa que fizemos antes.

166
00:11:40,690 --> 00:11:42,280
‫Então eu vou salvar este aviso.

167
00:11:42,280 --> 00:11:48,700
‫Não estou adicionando o arquivo de cabeçalho de volta lá e isso ocorre porque os auxiliares de depuração na verdade são incluídos

168
00:11:48,700 --> 00:11:50,830
‫por padrão, portanto, tecnicamente não precisamos dele.

169
00:11:50,830 --> 00:11:56,740
‫Vou salvar o salto de volta ao editor, fazer um pontapé inicial de codificação ao vivo e pressionar play.

170
00:11:56,740 --> 00:11:58,600
‫Então agora eu tenho minha esfera de depuração.

171
00:11:58,600 --> 00:12:05,320
‫Então vamos até a borda do mundo e eu vou mover o cursor do mouse até onde

172
00:12:05,320 --> 00:12:07,240
‫ele cai no abismo.

173
00:12:07,240 --> 00:12:10,330
‫E é aí que temos o problema.

174
00:12:10,330 --> 00:12:15,940
‫Veja bem, não temos um resultado de acerto sob o cursor quando nosso cursor se move para cima porque não

175
00:12:15,940 --> 00:12:18,730
‫há nada lá para obtermos um resultado de acerto.

176
00:12:18,730 --> 00:12:22,120
‫Portanto, nosso ponto de impacto não está definido.

177
00:12:22,120 --> 00:12:25,570
‫Então, o que precisamos é de algo para esse traço de linha atingir.

178
00:12:25,600 --> 00:12:28,810
‫Agora, o Unreal Engine tem muitas ferramentas que podemos usar.

179
00:12:28,810 --> 00:12:35,170
‫O que vou fazer é clicar no menu suspenso aqui e abrir o painel do ator do meu lugar e selecionar este

180
00:12:35,170 --> 00:12:38,380
‫ícone que diz volumes e obter um volume de bloqueio.

181
00:12:38,380 --> 00:12:39,820
‫Aqui está o volume de bloqueio.

182
00:12:39,820 --> 00:12:41,710
‫Vou arrastar um para dentro.

183
00:12:41,740 --> 00:12:44,020
‫Então agora eu tenho esse volume de bloqueio.

184
00:12:44,110 --> 00:12:48,190
‫Agora, por padrão, os volumes de bloqueio devem ser invisíveis.

185
00:12:48,190 --> 00:12:54,130
‫Se eu for ao painel de detalhes para isso e rolar para baixo até colisão,

186
00:12:54,130 --> 00:13:00,940
‫vejo que o Collision Presets é Invisible Wall, o que parece sugerir que ele deve bloquear quase tudo.

187
00:13:00,940 --> 00:13:06,610
‫A única coisa que não está bloqueando é o canal de visibilidade e nosso rastreamento de linha está

188
00:13:06,610 --> 00:13:08,680
‫rastreando contra o canal de visibilidade.

189
00:13:08,680 --> 00:13:13,630
‫Qualquer coisa em nosso mundo que bloqueie o canal de visibilidade será atingida pelo nosso rastreamento de linha.

190
00:13:13,630 --> 00:13:16,540
‫Mas este volume em particular não.

191
00:13:16,540 --> 00:13:17,860
‫Deve ser invisível.

192
00:13:17,860 --> 00:13:22,690
‫Bem, podemos ir para as predefinições de colisão, abrir o menu suspenso e selecionar personalizado.

193
00:13:22,720 --> 00:13:28,300
‫Isso nos permitirá mudar isso para que eu possa definir a resposta de colisão para o canal de visibilidade.

194
00:13:28,300 --> 00:13:29,170
‫É um bloco.

195
00:13:29,170 --> 00:13:34,960
‫Então agora eu tenho um volume invisível, mas está configurado para bloquear o canal de visibilidade, o que significa

196
00:13:34,960 --> 00:13:40,180
‫que os traços de linha que traçam contra o canal de visibilidade como o nosso vão atingi-lo.

197
00:13:40,180 --> 00:13:45,580
‫Então, o que posso fazer é pegar esse volume de bloqueio e escalá-lo.

198
00:13:45,580 --> 00:13:47,800
‫Vou colocá-lo um pouco além da parede.

199
00:13:47,800 --> 00:13:53,440
‫Na verdade, posso colocá-lo bem aqui nos limites da parede e abaixar um pouco para que

200
00:13:53,440 --> 00:13:55,900
‫fique meio que sobreposto à parede.

201
00:13:55,900 --> 00:14:01,930
‫E dessa forma temos essa barreira invisível aqui, e eu vou em frente e aumentá-la

202
00:14:01,930 --> 00:14:03,550
‫na direção Y também.

203
00:14:03,550 --> 00:14:09,880
‫Então eu vou ficar bem grande e posicioná-lo no meio aqui e dar-lhe um pouco de preenchimento.

204
00:14:09,880 --> 00:14:14,050
‫E também vou escalá-lo na direção Z.

205
00:14:14,050 --> 00:14:18,460
‫Então agora é bom e grande e nosso traço de linha deve atingi-lo.

206
00:14:18,460 --> 00:14:20,080
‫Então vamos testar essa teoria.

207
00:14:20,110 --> 00:14:23,170
‫Vamos clicar na viewport e ir até a parede.

208
00:14:23,170 --> 00:14:30,250
‫E com certeza, estou atingindo esse volume de bloqueio com meu traço de linha e não tenho esse problema em

209
00:14:30,250 --> 00:14:34,240
‫que minha torre se encaixa para olhar para algum local indefinido.

210
00:14:34,240 --> 00:14:40,810
‫Provavelmente está olhando para a origem do mundo porque esse vetor de ponto de impacto é todo zero.

211
00:14:40,810 --> 00:14:43,660
‫Agora, se eu for até esta parede, tenho o mesmo problema.

212
00:14:43,660 --> 00:14:46,270
‫Então, precisamos desses volumes de bloqueio.

213
00:14:46,600 --> 00:14:48,950
‫Ao redor do perímetro do nosso nível.

214
00:14:48,970 --> 00:14:50,590
‫Agora, isso pode ser muito fácil.

215
00:14:50,590 --> 00:14:54,820
‫Tudo o que preciso fazer é duplicar esse volume de bloqueio.

216
00:14:54,820 --> 00:14:59,290
‫Agora posso mudar da vista em perspectiva para a vista ortográfica superior.

217
00:14:59,290 --> 00:15:06,070
‫Então eu vou selecionar top e rolar para fora com a roda do mouse e simplesmente segure alt e duplique esta

218
00:15:06,070 --> 00:15:11,620
‫parede e coloque uma aqui e eu posso pressionar E para entrar no modo de rotação.

219
00:15:11,620 --> 00:15:14,740
‫Então eu vou segurar alt e girar 90 graus.

220
00:15:14,740 --> 00:15:21,010
‫Isso vai me dar uma cópia e então eu vou apertar u duplo e começar meu modo de tradução e

221
00:15:21,010 --> 00:15:26,920
‫eu vou movê-lo aqui para este lado e segurar Alt e arrastar uma cópia para aquele lado.

222
00:15:26,920 --> 00:15:28,720
‫Então agora temos quatro paredes.

223
00:15:28,720 --> 00:15:34,990
‫Agora eu posso ir da vista de cima para a perspectiva e apertar play, e agora eu posso ir até

224
00:15:34,990 --> 00:15:40,240
‫qualquer uma dessas paredes e não importa qual parede eu esteja coberta, então isso parece ótimo.

225
00:15:40,240 --> 00:15:42,340
‫Então isso resolve um dos nossos problemas.

226
00:15:42,340 --> 00:15:43,720
‫Mas e esse outro?

227
00:15:43,720 --> 00:15:49,360
‫Se movermos o mouse para perto de nosso tanque, ainda teremos esse comportamento esporádico.

228
00:15:49,360 --> 00:15:51,880
‫Então eu gostaria de cuidar disso também.

229
00:15:51,880 --> 00:15:56,770
‫Agora, a maneira como posso cuidar disso é interpolando essa rotação.

230
00:15:56,770 --> 00:16:02,650
‫Então, em vez de definir esse valor de rotação diretamente, podemos usar uma função

231
00:16:02,650 --> 00:16:08,740
‫de interpolação que essencialmente moverá essa rotação em direção ao alvo que fornecemos de maneira suave.

232
00:16:08,740 --> 00:16:10,270
‫Então vamos ver como isso funciona.

233
00:16:10,270 --> 00:16:15,970
‫Agora, eu gostaria que essa interpolação estivesse em nossa função de rotação da torre para que possamos

234
00:16:15,970 --> 00:16:22,750
‫voltar ao peão base para baixo para girar a torre e, em vez de definir nossa rotação mundial para a

235
00:16:22,750 --> 00:16:28,240
‫torre observar a rotação, podemos defini-la igual ao valor retornado por uma função de interpolação.

236
00:16:28,240 --> 00:16:34,720
‫Então, eu vou deletar, olhar para a rotação e, em vez disso, vamos chamar uma função

237
00:16:34,720 --> 00:16:38,590
‫na biblioteca de matemática F chamada R entre dois.

238
00:16:39,100 --> 00:16:44,530
‫Agora nosso in two foi projetado para lidar com a interpolação para rotadores.

239
00:16:44,530 --> 00:16:49,720
‫Agora, seu primeiro parâmetro de entrada é uma referência de rotador const F chamada atual.

240
00:16:49,720 --> 00:16:53,650
‫Esse é o valor atual da coisa que estamos tentando mudar.

241
00:16:53,650 --> 00:16:59,560
‫O que estamos tentando mudar é a rotação de nossas torres e podemos obtê-la em nossa malha de torres.

242
00:16:59,560 --> 00:17:05,920
‫Então, diremos malha de torre e a função que queremos usar é obter a rotação do componente.

243
00:17:05,920 --> 00:17:10,420
‫Portanto, é muito parecido com obter a localização do componente, apenas recebendo a rotação.

244
00:17:10,420 --> 00:17:14,200
‫Agora a próxima entrada é um rotador F chamado Target.

245
00:17:14,200 --> 00:17:15,310
‫Esse é o valor.

246
00:17:15,310 --> 00:17:21,430
‫Queremos que esta rotação da malha da torre interprete para uma aproximação suave.

247
00:17:21,430 --> 00:17:23,890
‫Esse será o nosso olhar sobre a rotação.

248
00:17:23,890 --> 00:17:26,620
‫Então eu vou dizer olhe para a rotação.

249
00:17:26,620 --> 00:17:28,630
‫A próxima entrada é o tempo Delta.

250
00:17:28,630 --> 00:17:30,640
‫Então, sabemos a importância do tempo Delta.

251
00:17:30,640 --> 00:17:37,030
‫Se estamos movendo coisas ou girando coisas, queremos que esse movimento seja independente da taxa de quadros.

252
00:17:37,030 --> 00:17:39,700
‫Então, para isso, podemos obter o tempo Delta.

253
00:17:39,700 --> 00:17:46,210
‫Eu posso simplesmente incluir estatísticas de jogo e se você tiver uma boa memória, você se lembrará que

254
00:17:46,210 --> 00:17:49,150
‫a inclusão é kismet slash estática de jogo.

255
00:17:49,150 --> 00:17:57,700
‫Então, eu vou pegar a estática do jogo aqui para que eu possa acessar a função estática, obter os segundos delta mundiais e

256
00:17:57,700 --> 00:18:01,150
‫lembrar que isso requer um objeto de contexto mundial.

257
00:18:01,150 --> 00:18:04,030
‫Então eu vou passar isso para isso.

258
00:18:04,030 --> 00:18:06,340
‫E por último, precisamos de uma velocidade interna.

259
00:18:06,340 --> 00:18:12,280
‫Quanto maior o valor da velocidade interna, mais rápido iremos interpolar em direção ao alvo.

260
00:18:12,280 --> 00:18:18,550
‫Então, se eu definir isso para um valor de, digamos, cinco F, então vamos interpolar bem devagar.

261
00:18:18,580 --> 00:18:20,470
‫Vamos ver como isso se parece agora.

262
00:18:20,470 --> 00:18:25,030
‫Tudo isso está em uma única linha e sai da tela.

263
00:18:25,030 --> 00:18:32,440
‫Então, o que vou fazer é colocar a entrada para definir a rotação do mundo em sua própria linha assim.

264
00:18:32,440 --> 00:18:34,060
‫Então assim mesmo.

265
00:18:34,060 --> 00:18:39,820
‫E então nosso intérprete, que tem esses quatro parâmetros de entrada também saindo da tela.

266
00:18:39,820 --> 00:18:43,270
‫Então, vou colocá-los cada um em suas próprias linhas.

267
00:18:43,270 --> 00:18:49,420
‫Dessa forma, podemos ver todas as entradas sem precisar rolar a tela assim.

268
00:18:49,420 --> 00:18:49,840
‫Tudo bem.

269
00:18:49,840 --> 00:18:54,220
‫Vou seguir em frente e salvá-lo e iniciar a codificação ao vivo.

270
00:18:54,220 --> 00:19:01,480
‫E agora se eu apertar play e mover o mouse, note que está demorando um pouco para que essa rotação aconteça.

271
00:19:01,480 --> 00:19:06,430
‫Isso porque estamos interpolando suavemente em direção a essa rotação de destino.

272
00:19:06,430 --> 00:19:07,780
‫Agora, isso é ótimo.

273
00:19:07,780 --> 00:19:09,340
‫Isso é exatamente o que eu queria.

274
00:19:09,340 --> 00:19:14,950
‫Não importa como eu mova meu mouse, nunca vou conseguir esse movimento esporádico e esporádico.

275
00:19:15,040 --> 00:19:20,170
‫Agora, cinco é uma velocidade de Internet terrivelmente lenta, mas podemos mudar isso.

276
00:19:20,170 --> 00:19:21,820
‫Podemos torná-lo um pouco mais rápido.

277
00:19:21,820 --> 00:19:28,420
‫Eu vou definir isso para 25, ver como fica, e eu vou deixar você ir em frente e decidir o valor que você

278
00:19:28,420 --> 00:19:30,040
‫gosta para o seu jogo.

279
00:19:30,040 --> 00:19:34,450
‫Então, mais uma vez, iniciando a codificação ao vivo e pressionando o play.

280
00:19:34,510 --> 00:19:39,010
‫Agora eu tenho uma interpolação bem rápida, mas não está se encaixando.

281
00:19:39,010 --> 00:19:42,910
‫Ainda é rápido, mas não é um estalo instantâneo.

282
00:19:42,910 --> 00:19:46,360
‫Então, enquanto não estivermos fazendo algo assim, bem, não conseguiremos isso.

283
00:19:46,540 --> 00:19:47,860
‫Comportamento louco.

284
00:19:47,860 --> 00:19:53,500
‫E, claro, se você quiser uma rotação mais lenta, você sabe como fazer agora e terminamos com a esfera de depuração

285
00:19:53,500 --> 00:19:56,220
‫do desenho, então vou em frente e removo isso.

286
00:19:56,230 --> 00:19:56,650
‫OK.

287
00:19:56,650 --> 00:20:02,920
‫Então, em resumo, definimos a rotação da torre e estamos dando uma olhada no Target, que é um

288
00:20:02,920 --> 00:20:05,800
‫vetor F correspondente a um ponto no mundo.

289
00:20:05,800 --> 00:20:08,080
‫No momento, estamos apenas usando o resultado da ocorrência de rastreamento.

290
00:20:08,110 --> 00:20:13,090
‫Agora colocamos esta função na classe base pong e a tornamos protegida, o que significa

291
00:20:13,090 --> 00:20:15,880
‫que conseguimos herdar a função na classe tank.

292
00:20:15,880 --> 00:20:21,190
‫E quando estivermos prontos para criar uma classe de torre baseada na base --, então essa classe de

293
00:20:21,190 --> 00:20:24,610
‫torre herdará essa função de rotação de torre e poderemos reutilizá-la.

294
00:20:24,610 --> 00:20:26,050
‫Tudo o que precisamos fazer é passar.

295
00:20:26,050 --> 00:20:31,750
‫Em uma nova visão do Target, trabalharemos na criação de uma classe de torre derivada da base -- nas

296
00:20:31,750 --> 00:20:32,380
‫próximas palestras.

297
00:20:32,380 --> 00:20:33,250
‫Vejo você em breve.

