﻿1
00:00:04,260 --> 00:00:05,890
‫Olá e bem-vindo de volta.

2
00:00:05,910 --> 00:00:11,130
‫Agora, já criamos nossa classe de projéteis e estamos prontos para começar a gerar essas

3
00:00:11,130 --> 00:00:15,660
‫coisas no nível para que possamos lançá-las nas torres e, eventualmente, destruí-las.

4
00:00:15,660 --> 00:00:19,950
‫Agora, a geração de atores envolverá a função de geração de atores.

5
00:00:19,950 --> 00:00:22,470
‫Então, vamos aprender como isso funciona neste vídeo.

6
00:00:22,470 --> 00:00:25,290
‫Agora, vamos falar sobre gerar o projétil.

7
00:00:25,320 --> 00:00:29,130
‫Isso é algo que gostaríamos de fazer do lado C++ das coisas.

8
00:00:29,130 --> 00:00:34,590
‫Vamos chamar funções C++ para criar novos objetos dinamicamente no mundo.

9
00:00:34,590 --> 00:00:41,610
‫Agora estamos gerando do lado C++ das coisas, mas gostaríamos de gerar um objeto com base no projeto de

10
00:00:41,610 --> 00:00:43,110
‫nossa classe de projétil.

11
00:00:43,110 --> 00:00:50,040
‫A razão é porque temos um projeto baseado na classe A Projectile C++, que contém

12
00:00:50,040 --> 00:00:51,030
‫informações adicionais.

13
00:00:51,030 --> 00:00:54,270
‫Especificamente, ele tem esse conjunto de propriedades de malha.

14
00:00:54,270 --> 00:00:57,780
‫Escolhemos a malha para nosso componente de malha estática.

15
00:00:57,780 --> 00:01:00,510
‫Portanto, não podemos apenas gerar a versão C++.

16
00:01:00,510 --> 00:01:04,590
‫Temos que gerar a versão do blueprint para obter essa malha.

17
00:01:04,590 --> 00:01:10,650
‫Então a questão é como geramos um objeto em C++, que é baseado em um blueprint?

18
00:01:10,650 --> 00:01:15,810
‫Bem, vamos aprender sobre algo chamado PT Subclass de agora este é um template.

19
00:01:15,810 --> 00:01:20,730
‫E, como muitos modelos, os colchetes angulares exigirão um tipo.

20
00:01:20,730 --> 00:01:24,480
‫Portanto, usar a subclasse PT de requer um parâmetro de tipo.

21
00:01:24,480 --> 00:01:29,790
‫E isso nos permite ter uma variável que armazena algo chamado classe U.

22
00:01:29,790 --> 00:01:36,690
‫A classe U representa um tipo de classe, mas também tem a capacidade de interagir com o sistema de reflexão do

23
00:01:36,690 --> 00:01:37,350
‫mecanismo irreal.

24
00:01:37,350 --> 00:01:43,290
‫Quando digo reflexão, quero dizer troca de informações entre o C++ e o lado do blueprint.

25
00:01:43,320 --> 00:01:50,700
‫PT subclass of, como o nome sugere, nos permite armazenar uma variável que representa uma classe baseada no

26
00:01:50,700 --> 00:01:54,870
‫tipo que estamos passando ou uma subclasse desse tipo escolhido.

27
00:01:54,870 --> 00:02:01,560
‫Isso significa que podemos escolher um tipo e t subclasse de pode conter uma classe u que representa esse tipo ou

28
00:02:01,560 --> 00:02:02,880
‫qualquer tipo derivado dele.

29
00:02:02,880 --> 00:02:06,360
‫E isso inclui projetos baseados no tipo.

30
00:02:06,360 --> 00:02:09,090
‫Então vamos ver como essa subclasse t de coisa funciona.

31
00:02:09,090 --> 00:02:09,380
‫OK.

32
00:02:09,390 --> 00:02:15,270
‫Então, estou de volta aqui na base pom e a razão pela qual estou na base pod é porque queremos que

33
00:02:15,270 --> 00:02:17,880
‫esse projétil esteja nas classes tanque e torre.

34
00:02:17,880 --> 00:02:20,910
‫Ambas as classes vão gerar projéteis.

35
00:02:20,910 --> 00:02:23,700
‫Então eu gostaria de uma subclasse t de variável aqui.

36
00:02:23,700 --> 00:02:30,930
‫Então, vou dizer t subclasse de e nos colchetes precisamos passar um tipo.

37
00:02:30,930 --> 00:02:34,740
‫Agora podemos encaminhar a declaração mesmo dentro de colchetes como este.

38
00:02:34,740 --> 00:02:37,440
‫E eu vou fazer do tipo um projétil.

39
00:02:37,440 --> 00:02:42,690
‫E a razão é porque criamos a classe projétil e seu tipo é um projétil.

40
00:02:42,690 --> 00:02:47,940
‫Então vou criar essa variável e vou chamá-la de classe de projétil.

41
00:02:47,940 --> 00:02:54,960
‫Agora, isso nos permitirá ter uma variável C++ que representa um tipo de classe, e o tipo pode ser baseado

42
00:02:54,960 --> 00:02:59,670
‫em um projétil, até mesmo um tipo de classe blueprint baseado nisso.

43
00:02:59,670 --> 00:03:02,100
‫Agora vou dar uma propriedade U.

44
00:03:02,730 --> 00:03:07,620
‫E porque eu gostaria de poder editar isso, pelo menos no blueprint padrão, vou

45
00:03:07,620 --> 00:03:09,060
‫tornar essa edição padrão.

46
00:03:09,060 --> 00:03:12,540
‫Só agora podemos dar a isso uma categoria.

47
00:03:13,530 --> 00:03:16,170
‫Vou colocá-lo em uma categoria chamada combate.

48
00:03:16,200 --> 00:03:18,240
‫Agora vamos em frente e compilar isso.

49
00:03:18,270 --> 00:03:23,130
‫Ok, então estou de volta ao editor e vou para a pasta blueprints e de lá para

50
00:03:23,130 --> 00:03:24,330
‫a pasta Pons.

51
00:03:24,330 --> 00:03:29,580
‫E eu vou abrir o BP -- tanque e abrir o editor de plantas completo.

52
00:03:29,580 --> 00:03:32,910
‫Agora, se eu olhar no painel de detalhes, posso procurar combate.

53
00:03:32,910 --> 00:03:33,840
‫Aqui está.

54
00:03:33,840 --> 00:03:36,540
‫E aqui está a variável de classe do projétil.

55
00:03:36,540 --> 00:03:40,410
‫Esta é aquela subclasse que chamamos de classe de projétil.

56
00:03:40,410 --> 00:03:44,250
‫Agora observe que podemos configurá-lo aqui e podemos configurá-lo usando um menu suspenso.

57
00:03:44,250 --> 00:03:47,910
‫E se clicarmos no menu suspenso, temos três opções.

58
00:03:47,910 --> 00:03:53,340
‫Podemos configurá-lo para none, que é o que é configurado por padrão, o que basicamente significa que é um ponteiro nulo.

59
00:03:53,340 --> 00:03:57,960
‫Ou podemos configurá-lo para projétil ou projétil BP.

60
00:03:57,990 --> 00:04:04,740
‫É isso que a subclasse de nos permite fazer é definir essa classe de projétil para um tipo específico baseado em projétil,

61
00:04:04,740 --> 00:04:08,880
‫já que esse é o tipo que escolhemos quando criamos a variável.

62
00:04:08,880 --> 00:04:10,140
‫Agora projétil aqui.

63
00:04:10,140 --> 00:04:14,520
‫Esta é a classe C++ chamada projétil em C++.

64
00:04:14,520 --> 00:04:22,260
‫É um projétil, mas o projétil BP é um projeto baseado na classe de projéteis C++ e podemos escolher

65
00:04:22,260 --> 00:04:22,920
‫isso.

66
00:04:22,920 --> 00:04:27,870
‫E agora a classe do projétil está configurada para o tipo de projétil BP.

67
00:04:27,870 --> 00:04:32,610
‫Agora, isso não é um componente e não é um objeto de projétil BP.

68
00:04:32,610 --> 00:04:33,540
‫Não é isso.

69
00:04:33,540 --> 00:04:36,480
‫Ele armazena um tipo, mais especificamente um U.

70
00:04:36,480 --> 00:04:37,260
‫Tipo de aula.

71
00:04:37,260 --> 00:04:44,730
‫E como eu disse, sua classe tem uma funcionalidade interna que permite que a reflexão funcione entre C++ e

72
00:04:44,730 --> 00:04:45,390
‫blueprints.

73
00:04:45,390 --> 00:04:48,690
‫As informações podem fluir entre C++ e blueprints.

74
00:04:48,690 --> 00:04:55,710
‫Então agora temos a classe de projétil, uma subclasse PT de conjunto para o tipo de projeto de projétil BP.

75
00:04:55,710 --> 00:04:59,790
‫Então, por que se dar ao trabalho de criar uma subclasse de variável?

76
00:04:59,790 --> 00:05:03,750
‫Bem, precisamos discutir como funciona a função do ator de desova.

77
00:05:04,200 --> 00:05:08,400
‫O ator de desova é uma função pertencente à nova classe mundial.

78
00:05:08,400 --> 00:05:12,120
‫Então, se conseguirmos controlar o mundo, podemos chamar o ator Spawn.

79
00:05:12,120 --> 00:05:19,620
‫E o ator Spawn é outra função de modelo e foi projetada para criar novos objetos semelhantes a criar

80
00:05:19,620 --> 00:05:21,060
‫um subobjeto padrão.

81
00:05:21,060 --> 00:05:28,260
‫Mas criar subobjeto padrão é projetado para criar componentes e só podemos usá-lo no construtor para que um determinado

82
00:05:28,260 --> 00:05:35,520
‫ator de geração de classe possa ser chamado em tempo de execução enquanto o jogo estiver em execução e pode

83
00:05:35,520 --> 00:05:36,360
‫criar atores.

84
00:05:36,360 --> 00:05:39,450
‫Agora é um modelo, então requer um tipo.

85
00:05:39,480 --> 00:05:45,780
‫Se quisermos gerar um projétil, então passaríamos no tipo de classe C++ aqui um projétil.

86
00:05:45,810 --> 00:05:52,590
‫Esta é a classe C++ que é retornada pela função spawn ator em C++.

87
00:05:52,620 --> 00:05:57,060
‫Agora os parênteses recebem vários parâmetros, incluindo uma classe U.

88
00:05:57,060 --> 00:06:02,190
‫Agora, existem várias sobrecargas dessa função que recebem diferentes parâmetros de entrada.

89
00:06:02,190 --> 00:06:07,590
‫O mais simples talvez seja a versão que leva uma classe U, um local e uma rotação.

90
00:06:07,590 --> 00:06:08,010
‫O U.

91
00:06:08,010 --> 00:06:11,280
‫Classe é o que representa o tipo a ser gerado.

92
00:06:11,310 --> 00:06:16,020
‫Este é o tipo real do objeto que é gerado.

93
00:06:16,050 --> 00:06:18,300
‫Esta poderia ser uma classe de projeto.

94
00:06:18,330 --> 00:06:25,890
‫A localização é um vetor F especificando onde gerar o objeto e a rotação especificará sua rotação.

95
00:06:25,890 --> 00:06:28,710
‫Então, um exemplo da sintaxe se parece com isso.

96
00:06:28,710 --> 00:06:35,580
‫Chamaríamos o ator spawn especificando o tipo de classe e, em seguida, passando as informações da classe u junto com

97
00:06:35,580 --> 00:06:38,820
‫o vetor de localização e o rotador de rotação.

98
00:06:38,820 --> 00:06:41,160
‫Então, vamos falar sobre sua classe por um segundo.

99
00:06:41,160 --> 00:06:44,970
‫Agora, como temos dito, sua classe representa um tipo de classe.

100
00:06:44,970 --> 00:06:51,480
‫Quando chamamos o ator Spawn, passamos uma classe U para fornecer à função do ator spawn informações sobre

101
00:06:51,480 --> 00:06:53,550
‫o objeto a ser gerado.

102
00:06:53,910 --> 00:07:01,320
‫Sim, passamos um tipo entre colchetes angulares, mas isso simplesmente informa ao ator Spawn o tipo C++ a ser

103
00:07:01,320 --> 00:07:01,860
‫criado.

104
00:07:01,860 --> 00:07:04,890
‫Considerando que sua classe contém mais informações.

105
00:07:04,890 --> 00:07:11,070
‫Digamos que criamos um projeto baseado em um projétil e no projeto definimos algumas propriedades, como escolher

106
00:07:11,070 --> 00:07:14,580
‫a malha estática para o componente de malha estática.

107
00:07:14,580 --> 00:07:21,480
‫Agora, se apenas gerarmos uma classe C++ bruta, essa malha estática não será definida no objeto

108
00:07:21,480 --> 00:07:22,860
‫de projétil recém-gerado.

109
00:07:22,860 --> 00:07:26,250
‫Essencialmente, estaríamos apenas gerando um novo ator invisível.

110
00:07:26,430 --> 00:07:30,780
‫No entanto, uma nova variável de classe pode representar uma classe de blueprint.

111
00:07:30,930 --> 00:07:37,140
‫Sua classe nos dá a capacidade de ter uma variável no lado C++, que representa um blueprint, tipo

112
00:07:37,140 --> 00:07:38,730
‫de classe e spawn.

113
00:07:38,730 --> 00:07:45,900
‫O ator pode usar essa classe como um argumento de entrada para que possa gerar um novo objeto com base no

114
00:07:45,900 --> 00:07:48,060
‫blueprint representado por essa nova classe.

115
00:07:48,060 --> 00:07:54,810
‫Portanto, um novo projétil terá sua propriedade de malha estática definida porque estamos gerando um novo objeto com

116
00:07:54,810 --> 00:07:58,560
‫base no blueprint e não na classe C++ bruta.

117
00:07:58,560 --> 00:08:05,190
‫É por isso que criamos nossa subclasse de porque ela pode armazenar uma nova classe e fomos capazes

118
00:08:05,190 --> 00:08:10,050
‫de defini-la igual ao projétil BP do nosso BP -- projeto de tanque.

119
00:08:10,050 --> 00:08:13,020
‫Então agora você sabe como gerar atores.

120
00:08:13,170 --> 00:08:16,020
‫O ator Spawn pertence à nova classe mundial.

121
00:08:16,020 --> 00:08:22,320
‫Então, se você chamar get world e simplesmente chamar o ator Spawn, então você conhecerá os requisitos

122
00:08:22,320 --> 00:08:29,370
‫de entrada para essa função que você passa no tipo C++ entre colchetes angulares e classifica um local e uma

123
00:08:29,370 --> 00:08:30,750
‫rotação entre parênteses.

124
00:08:30,750 --> 00:08:35,820
‫Então, para o seu desafio, você vai gerar o projétil, faça isso na função de fogo.

125
00:08:35,820 --> 00:08:41,760
‫Então chame o ator de geração mundial e passe um projétil nos colchetes.

126
00:08:41,760 --> 00:08:45,390
‫Isso significa que você precisará incluir o arquivo de cabeçalho para o projétil.

127
00:08:45,390 --> 00:08:52,170
‫Portanto, não se esqueça disso e use nossa nova classe de projétil variável como o parâmetro de entrada da classe U

128
00:08:52,170 --> 00:08:52,920
‫entre parênteses.

129
00:08:52,920 --> 00:08:55,320
‫Agora precisamos de uma localização e uma rotação.

130
00:08:55,320 --> 00:09:00,480
‫Você vai usar o ponto de desova do projétil para localização e rotação.

131
00:09:00,480 --> 00:09:02,850
‫Do componente do ponto de geração de projéteis.

132
00:09:02,850 --> 00:09:09,000
‫Você pode chamar get component location e obter rotação de componente para acessar esses valores.

133
00:09:09,000 --> 00:09:14,040
‫Então pause o vídeo e chame o spawn ator na função de fogo agora.

134
00:09:16,920 --> 00:09:17,310
‫OK.

135
00:09:17,310 --> 00:09:22,880
‫Então vamos para o Base Pond CP onde temos a função fire definida.

136
00:09:22,890 --> 00:09:25,230
‫Agora temos desenhar a esfera de depuração aqui.

137
00:09:25,230 --> 00:09:27,450
‫Nós realmente não vamos precisar mais disso.

138
00:09:27,450 --> 00:09:33,270
‫Então, vou deletar essa chamada de função e, em vez disso, vou chamar o ator Spawn aqui.

139
00:09:33,270 --> 00:09:36,750
‫Agora já temos a localização do ponto de spawn do projétil.

140
00:09:37,050 --> 00:09:43,770
‫Vou renomear esta variável local para simplesmente location e vou criar um novo rotador F.

141
00:09:44,430 --> 00:09:45,810
‫Chamado de rotação.

142
00:09:45,900 --> 00:09:50,010
‫E isso eu vou conseguir do ponto de desova do projétil também.

143
00:09:50,010 --> 00:09:56,670
‫Então, será o ponto de geração do projétil para obter a rotação do componente.

144
00:09:56,670 --> 00:10:01,980
‫Então agora eu tenho a localização e a rotação para gerar o projétil.

145
00:10:02,430 --> 00:10:07,050
‫Então, em seguida, preciso chamar spawn ator para poder chamar get world.

146
00:10:07,050 --> 00:10:11,910
‫E do mundo que recebo dessa função, posso chamar spawn ator.

147
00:10:12,240 --> 00:10:15,780
‫Agora, isso tem colchetes e parênteses, certo?

148
00:10:15,780 --> 00:10:19,740
‫Então, nos colchetes, preciso usar um projétil.

149
00:10:21,240 --> 00:10:25,640
‫E como estamos usando um projétil, precisamos incluir o cabeçalho para isso.

150
00:10:25,650 --> 00:10:32,760
‫Então aqui em cima, vou remover, desenhar auxiliares de depuração e substituí-lo por projétil.

151
00:10:34,740 --> 00:10:37,260
‫Então agora temos esse tipo incluído.

152
00:10:37,260 --> 00:10:44,070
‫Agora precisamos da classe U e com base em H tem classe projétil, podemos usar isso como a classe U.

153
00:10:44,070 --> 00:10:47,050
‫Então vamos passar na aula de projéteis.

154
00:10:47,070 --> 00:10:54,750
‫Agora, finalmente, podemos passar a localização e a rotação e isso satisfará a função do ator de desova.

155
00:10:54,750 --> 00:11:00,420
‫Então, vamos compilar isso e voltamos aqui no editor e podemos testar o jogo.

156
00:11:00,420 --> 00:11:04,080
‫Então eu vou em frente e clicar e verificar isso.

157
00:11:04,080 --> 00:11:06,750
‫Geramos um novo projétil.

158
00:11:06,750 --> 00:11:13,680
‫Estamos gerando o projétil na ponta do nosso barril e eles meio que pairam no ar, o que

159
00:11:13,680 --> 00:11:15,660
‫realmente não parece certo.

160
00:11:15,660 --> 00:11:16,430
‫Mas está tudo bem.

161
00:11:16,440 --> 00:11:17,700
‫Este é o primeiro passo.

162
00:11:17,700 --> 00:11:23,580
‫Primeiro temos que gerar o projétil, fazendo com que ele aja como um projétil como o próximo passo.

163
00:11:23,580 --> 00:11:27,120
‫Então, em resumo, agora estamos gerando projéteis.

164
00:11:27,150 --> 00:11:29,060
‫Este é um grande marco.

165
00:11:29,070 --> 00:11:32,250
‫No entanto, eles ainda não são projéteis.

166
00:11:32,280 --> 00:11:36,060
‫Eles apenas pairam lá e os projéteis devem voar pelo ar.

167
00:11:36,210 --> 00:11:41,490
‫Então, no próximo vídeo, vamos falar sobre como fazer nossos projéteis voarem pelo ar

168
00:11:41,490 --> 00:11:43,800
‫para que ajam como projéteis.

169
00:11:43,830 --> 00:11:44,700
‫Vejo você em breve.

