﻿1
00:00:04,130 --> 00:00:04,610
‫Ei.

2
00:00:04,610 --> 00:00:05,450
‫Bem vindo de volta.

3
00:00:05,480 --> 00:00:09,080
‫Agora, já criamos uma base -- classe C++.

4
00:00:09,200 --> 00:00:16,310
‫Neste vídeo, vamos derivar dessa classe para criar uma nova classe filha com base em --.

5
00:00:16,340 --> 00:00:19,310
‫Então, vamos discutir por que gostaríamos de fazer uma coisa dessas.

6
00:00:19,580 --> 00:00:26,300
‫Então temos essa base -- class e sabemos que teremos duas classes diferentes que derivam da base

7
00:00:26,300 --> 00:00:27,080
‫--.

8
00:00:27,080 --> 00:00:30,020
‫Nós vamos ter nosso tanque e nós vamos ter a torre.

9
00:00:30,050 --> 00:00:34,760
‫Agora, a base - contém malhas, uma cápsula e um ponto de desova.

10
00:00:34,760 --> 00:00:38,210
‫E essas são coisas que o Tanque e a torre podem herdar.

11
00:00:38,360 --> 00:00:44,480
‫Mas o tanque e a torre também terão algumas funcionalidades que diferem entre si.

12
00:00:44,480 --> 00:00:50,060
‫Por um lado, nosso tanque vai se mover pelo mundo e também vai ser controlado pelo

13
00:00:50,060 --> 00:00:50,720
‫jogador.

14
00:00:50,720 --> 00:00:55,220
‫Portanto, ele precisará ser configurado para receber entradas do teclado e do mouse.

15
00:00:55,220 --> 00:00:57,950
‫A torre, por outro lado, vai ficar ali.

16
00:00:57,980 --> 00:01:03,860
‫Ele não precisa de nenhuma entrada do jogador, pois suas ações serão todas controladas por código.

17
00:01:03,860 --> 00:01:10,010
‫Então, como o tanque e a torre se comportarão de maneira diferente, usaremos a herança para criar classes

18
00:01:10,010 --> 00:01:16,730
‫filhas de base -- para que possamos herdar o que eles têm em comum e adicionar a cada classe os

19
00:01:16,730 --> 00:01:18,290
‫recursos que serão diferentes.

20
00:01:18,290 --> 00:01:23,960
‫Então, estamos de volta aqui no editor e vou entrar em nossas classes C++, a pasta do Tune

21
00:01:23,960 --> 00:01:29,240
‫Tank onde temos nossa base -- class e esta será a classe da qual derivaremos.

22
00:01:29,240 --> 00:01:35,480
‫Agora podemos clicar com o botão direito do mouse aqui e selecionar criar classe C++ derivada de base --.

23
00:01:35,480 --> 00:01:41,690
‫Então, vamos escolher isso e vou permitir que ele coloque essa classe na mesma pasta de tanques de ajuste de barra

24
00:01:41,690 --> 00:01:43,550
‫de origem como base --.

25
00:01:43,610 --> 00:01:47,360
‫E para o nome disso, vou chamá-lo de tanque.

26
00:01:47,360 --> 00:01:54,560
‫Então nossa classe de tanque será a classe do nosso tanque real -- que estamos controlando e nos movendo

27
00:01:54,560 --> 00:01:55,400
‫pelo mundo.

28
00:01:55,430 --> 00:01:57,410
‫Então vamos clicar em criar classe.

29
00:01:57,560 --> 00:02:06,470
‫Ok, então nós compilamos e o código vs foi aberto com nosso novo arquivo de tanque e também temos o Tank CP.

30
00:02:06,500 --> 00:02:08,210
‫Agora estes estão bem nus.

31
00:02:08,210 --> 00:02:14,570
‫Não há realmente nada aqui, mas mesmo que não possamos vê-los, herdamos algumas coisas

32
00:02:14,570 --> 00:02:15,950
‫da classe base.

33
00:02:15,950 --> 00:02:19,580
‫Nós temos esses componentes que adicionamos à base --.

34
00:02:19,580 --> 00:02:23,810
‫Mesmo que sejam variáveis privadas, elas ainda existem nesta classe.

35
00:02:23,810 --> 00:02:29,030
‫Agora que criamos nossa classe tanque, vamos falar sobre algumas coisas.

36
00:02:29,030 --> 00:02:31,880
‫O tanque precisará que a torre não.

37
00:02:31,880 --> 00:02:37,490
‫Bem, já que vamos controlar o tanque, vamos precisar de uma maneira de focar no tanque enquanto ele

38
00:02:37,490 --> 00:02:39,530
‫está rolando ao longo do nível.

39
00:02:39,950 --> 00:02:43,880
‫Agora, nesta foto, este aqui é um componente de câmera.

40
00:02:43,880 --> 00:02:47,030
‫Sua classe C++ é seu componente de câmera.

41
00:02:47,180 --> 00:02:55,100
‫E esta linha vermelha aqui é chamada de componente de braço de mola e sua classe C++ é seu componente de braço de mola.

42
00:02:55,100 --> 00:03:01,370
‫Adicionar esses componentes a um -- nos permite ver o -- do ponto de vista da câmera.

43
00:03:01,370 --> 00:03:07,790
‫E se a câmera e seu braço de mola estiverem presos ao -- de alguma forma, eles seguirão o -- ao

44
00:03:07,790 --> 00:03:08,930
‫redor do mundo.

45
00:03:08,930 --> 00:03:14,540
‫Agora, de volta aqui no editor, se voltarmos para nossa pasta --' e abrirmos BP -- tanque, podemos clicar

46
00:03:14,540 --> 00:03:16,730
‫na janela de visualização para ver tudo.

47
00:03:16,730 --> 00:03:22,100
‫E então podemos selecionar a composição da cápsula e clicar em adicionar e selecionar o braço da mola.

48
00:03:22,100 --> 00:03:24,080
‫Este é um componente de braço de mola.

49
00:03:24,080 --> 00:03:25,610
‫Parece uma linha vermelha.

50
00:03:25,730 --> 00:03:31,490
‫Agora com nosso componente de braço de mola selecionado, podemos adicionar outro componente e escolher a câmera.

51
00:03:31,490 --> 00:03:37,400
‫Agora, uma vez que adicionamos a câmera conectada ao braço da mola, agora temos uma maneira de ver do

52
00:03:37,400 --> 00:03:41,230
‫ponto de vista da câmera quando começamos a controlar o --.

53
00:03:41,240 --> 00:03:43,040
‫Agora o braço da mola é bastante útil.

54
00:03:43,040 --> 00:03:49,250
‫Ela tem esse comprimento de braço alvo e se você ajustar, verá que a câmera se ajusta junto com o braço

55
00:03:49,250 --> 00:03:49,940
‫de mola.

56
00:03:49,940 --> 00:03:54,470
‫Portanto, esta é uma maneira de controlar o quão longe a câmera está do --.

57
00:03:54,470 --> 00:04:00,170
‫Então, essas são definitivamente as coisas que queremos em nossa -- class, mas vamos adicioná-las

58
00:04:00,170 --> 00:04:04,460
‫do lado C++ em vez de apenas adicioná-las aqui no blueprint.

59
00:04:04,460 --> 00:04:05,750
‫Então eu vou deletar esses.

60
00:04:05,750 --> 00:04:10,130
‫Então, para o seu desafio, gostaria que você adicionasse algumas coisas à classe de tanques.

61
00:04:10,130 --> 00:04:15,890
‫Por um lado, precisamos de um componente de braço de mola e um componente de câmera, então crie essas variáveis

62
00:04:15,890 --> 00:04:16,790
‫e torne-as ponteiros.

63
00:04:16,790 --> 00:04:21,920
‫Vá em frente e faça uma seção pública e uma privada e coloque essas variáveis na seção privada.

64
00:04:21,920 --> 00:04:27,590
‫Agora precisaremos que sejam propriedades U, então dê a elas macros de propriedade e preencha essas macros com

65
00:04:27,590 --> 00:04:31,610
‫os especificadores apropriados com base no que você aprendeu nas aulas anteriores.

66
00:04:31,640 --> 00:04:36,920
‫Agora, uma vez que você criou essas variáveis, crie um construtor e coloque-o na seção

67
00:04:36,920 --> 00:04:44,120
‫pública e defina-o no arquivo CP e, em seguida, dentro do construtor, construa nossos componentes de câmera e braço de

68
00:04:44,120 --> 00:04:46,340
‫mola usando criar subobjeto padrão.

69
00:04:46,340 --> 00:04:50,750
‫Certifique-se de usar o anexo de configuração para anexar esses componentes a algo.

70
00:04:50,750 --> 00:04:54,380
‫Gostaríamos que nosso componente de braço de mola fosse anexado ao componente de raiz.

71
00:04:54,380 --> 00:05:00,500
‫Portanto, use o componente raiz e defina o acessório de configuração e, para a câmera, conecte-o ao braço da mola.

72
00:05:00,500 --> 00:05:02,870
‫Você pode consultar a classe -- base.

73
00:05:03,020 --> 00:05:05,950
‫R Lembre-se de como é o código para fazer essas coisas.

74
00:05:05,960 --> 00:05:09,710
‫Vá em frente e pause o vídeo e adicione essas coisas à classe do tanque.

75
00:05:12,580 --> 00:05:13,180
‫Tudo bem.

76
00:05:13,180 --> 00:05:14,380
‫Então estamos aqui em Tank.

77
00:05:15,250 --> 00:05:16,540
‫Agora, as primeiras coisas primeiro.

78
00:05:16,540 --> 00:05:20,110
‫Eu gostaria de ter uma seção pública e uma seção privada.

79
00:05:20,350 --> 00:05:24,840
‫Portanto, a seção privada será onde adicionaremos esses dois novos componentes.

80
00:05:24,850 --> 00:05:31,810
‫Vamos querer um componente de braço de mola em U, que será um ponteiro, e podemos chamá-lo de braço de

81
00:05:31,810 --> 00:05:32,290
‫mola.

82
00:05:32,290 --> 00:05:37,760
‫E também precisaremos de um novo componente de câmera e chamaremos essa câmera.

83
00:05:37,780 --> 00:05:38,260
‫Tudo bem.

84
00:05:38,260 --> 00:05:39,970
‫Se seus nomes são ligeiramente diferentes.

85
00:05:40,090 --> 00:05:45,070
‫Agora, logo de cara, estou vendo os erros do IntelliSense aqui, o que significa

86
00:05:45,070 --> 00:05:46,420
‫que precisarei declará-los.

87
00:05:46,420 --> 00:05:51,280
‫Então eu vou usar classe com braço de mola e classe com câmera.

88
00:05:51,280 --> 00:05:53,150
‫E agora estes são declarados para a frente.

89
00:05:53,170 --> 00:05:55,240
‫Agora precisamos de nossas novas propriedades.

90
00:05:55,240 --> 00:05:57,460
‫Então vamos adicionar as novas macros de propriedade.

91
00:05:57,970 --> 00:06:02,930
‫E dentro da macro de propriedade vamos querer ter alguns especificadores.

92
00:06:02,950 --> 00:06:09,550
‫Eles estarão visíveis em qualquer lugar, pois vimos que os componentes precisam estar visíveis em qualquer lugar para

93
00:06:09,550 --> 00:06:13,010
‫que possamos ajustar seus parâmetros no painel de detalhes.

94
00:06:13,030 --> 00:06:18,550
‫Agora, não estou vendo nenhuma necessidade imediata de exposição ao gráfico de eventos, então não acho que precisamos ler,

95
00:06:18,550 --> 00:06:20,600
‫escrever ou ler o blueprint somente.

96
00:06:20,620 --> 00:06:21,160
‫Tudo bem.

97
00:06:21,160 --> 00:06:23,770
‫Se você os adicionou, vou deixá-los de fora agora.

98
00:06:23,770 --> 00:06:25,630
‫Eu vou dar a estes uma categoria.

99
00:06:26,410 --> 00:06:32,230
‫E como esses são componentes, vou colocá-los em nossa categoria de componentes junto com nossos

100
00:06:32,230 --> 00:06:33,330
‫outros componentes.

101
00:06:33,340 --> 00:06:38,470
‫Agora, não estou expondo isso ao gráfico de eventos, portanto, não preciso de nossa meta permitir acesso privado especificado

102
00:06:38,500 --> 00:06:38,940
‫aqui.

103
00:06:38,950 --> 00:06:45,640
‫Então isso é suficiente para o braço de mola e eu gostaria de dar ao componente da câmera a mesma propriedade que você.

104
00:06:46,180 --> 00:06:47,590
‫Então estou copiando.

105
00:06:47,590 --> 00:06:49,270
‫Então agora temos nossos componentes.

106
00:06:49,420 --> 00:06:54,700
‫A próxima coisa a fazer é construí-los no construtor, o que significa que precisamos de um construtor.

107
00:06:54,700 --> 00:07:02,650
‫Agora o construtor terá o mesmo nome da classe, então é um tanque e precisamos definir este construtor no

108
00:07:02,650 --> 00:07:03,910
‫arquivo CP.

109
00:07:03,910 --> 00:07:08,710
‫Então vamos ao Tank CP e crie um tanque.

110
00:07:09,520 --> 00:07:16,180
‫Portanto, há nosso corpo de função e o construtor do tanque deve ser prefixado com o nome da nossa classe e o

111
00:07:16,180 --> 00:07:17,710
‫operador de resolução do escopo.

112
00:07:17,710 --> 00:07:19,360
‫São esses dois-pontos duplos aqui.

113
00:07:19,360 --> 00:07:24,850
‫Dessa forma, não estamos apenas criando uma nova função, mas definindo nosso construtor para essa classe.

114
00:07:24,850 --> 00:07:27,130
‫Agora gostaríamos de construir esses componentes.

115
00:07:27,130 --> 00:07:29,530
‫Então vamos começar com o braço de mola.

116
00:07:29,860 --> 00:07:39,160
‫Então, vamos dizer que o braço da mola é igual a criar um subobjeto padrão e este será um componente do braço da mola u.

117
00:07:41,260 --> 00:07:45,310
‫E para o texto, vou simplesmente chamar este braço de mola.

118
00:07:46,270 --> 00:07:54,490
‫E para o acessório, vamos configurar o braço da mola, configurar o acessório, passando no componente raiz.

119
00:07:55,920 --> 00:07:56,220
‫Agora.

120
00:07:56,220 --> 00:07:57,240
‫Eu estava esperando por isso.

121
00:07:57,240 --> 00:07:58,050
‫Aí está.

122
00:07:58,050 --> 00:08:03,920
‫O erro do IntelliSense dizendo que o ponteiro para o tipo de classe incompleta usa o componente do braço da mola.

123
00:08:03,930 --> 00:08:10,320
‫Isso porque precisamos incluir o arquivo de cabeçalho, pois estamos criando e usando um componente de braço de mola.

124
00:08:10,320 --> 00:08:16,020
‫Então aqui está a minha documentação do mecanismo irreal e se eu rolar para baixo, lá está o meu include.

125
00:08:16,020 --> 00:08:21,820
‫Então eu vou copiar isso e colar bem aqui no topo, logo abaixo da borda do tanque.

126
00:08:21,900 --> 00:08:26,520
‫Agora, apenas uma nota lateral em geral, você manterá seu arquivo de cabeçalho de classe

127
00:08:26,520 --> 00:08:29,370
‫incluído no topo e inclui seus componentes abaixo disso.

128
00:08:29,370 --> 00:08:30,750
‫Então temos nosso braço de mola.

129
00:08:30,750 --> 00:08:32,790
‫É hora de construir a câmera.

130
00:08:32,790 --> 00:08:39,300
‫Então, vamos dizer que a câmera cria um subobjeto padrão, seu componente de câmera.

131
00:08:40,050 --> 00:08:45,240
‫E na macro de texto, vou chamar isso simplesmente de câmera.

132
00:08:45,240 --> 00:08:51,120
‫E para a câmera vou chamar o acessório de configuração passando no braço da mola.

133
00:08:51,390 --> 00:08:54,240
‫E é claro que preciso do arquivo de cabeçalho da câmera.

134
00:08:54,240 --> 00:08:59,820
‫Então aqui está a documentação do mecanismo irreal e aqui onde diz a documentação

135
00:08:59,820 --> 00:09:05,490
‫de pesquisa, vou digitar o componente da câmera e aqui vejo o componente da câmera.

136
00:09:05,490 --> 00:09:06,600
‫Eu vou selecionar isso.

137
00:09:06,600 --> 00:09:09,450
‫E aqui está a documentação do componente da câmera.

138
00:09:09,450 --> 00:09:14,100
‫Então, vou copiá-lo para incluir e colá-lo aqui no topo do nosso arquivo.

139
00:09:14,100 --> 00:09:15,930
‫E agora devemos ser bons.

140
00:09:15,960 --> 00:09:18,630
‫Ok, então vamos em frente e compilar isso.

141
00:09:18,810 --> 00:09:19,230
‫OK.

142
00:09:19,230 --> 00:09:21,180
‫Então eu tenho uma compilação bem sucedida.

143
00:09:21,210 --> 00:09:24,210
‫Vamos voltar ao editor e aqui em -- Tank.

144
00:09:24,240 --> 00:09:30,690
‫Claro, não vemos nada porque -- tank é derivado de base -- e os componentes que acabamos

145
00:09:30,690 --> 00:09:33,510
‫de adicionar, adicionamos à classe tank.

146
00:09:33,510 --> 00:09:39,720
‫Então BP -- tanque não vai conseguir isso porque não é derivado da classe tanque.

147
00:09:39,720 --> 00:09:44,910
‫Agora poderíamos criar um novo projeto baseado na classe do tanque, mas então teríamos que

148
00:09:44,910 --> 00:09:46,710
‫configurar esses componentes novamente.

149
00:09:46,710 --> 00:09:50,190
‫E eu realmente não sinto vontade de passar por todo esse trabalho uma segunda vez.

150
00:09:50,190 --> 00:09:55,080
‫Há uma maneira mais fácil de reparar esse projeto para a classe tanque.

151
00:09:55,080 --> 00:10:01,530
‫Fazemos isso indo até as configurações da classe e no painel de detalhes com as configurações da classe selecionadas,

152
00:10:01,530 --> 00:10:04,980
‫vemos as opções da classe e há essa classe pai.

153
00:10:04,980 --> 00:10:10,800
‫O menu suspenso mostra que está definido como base, mas se clicarmos nele, podemos procurar por tanque

154
00:10:10,800 --> 00:10:13,200
‫e escolher tanque como a classe base.

155
00:10:13,200 --> 00:10:17,220
‫E agora este projeto é derivado da classe tanque.

156
00:10:17,220 --> 00:10:23,070
‫Então, vemos que todas essas propriedades que definimos com nossos componentes, como a malha e o tamanho da

157
00:10:23,070 --> 00:10:24,630
‫cápsula, ainda estão lá.

158
00:10:24,660 --> 00:10:27,090
‫Só agora vemos uma câmera.

159
00:10:27,390 --> 00:10:29,730
‫Na verdade, temos um braço de mola e uma câmera.

160
00:10:29,730 --> 00:10:33,720
‫E se selecionarmos o braço da mola agora, podemos ver aquela linha vermelha.

161
00:10:33,720 --> 00:10:34,710
‫Então isso é ótimo.

162
00:10:34,710 --> 00:10:38,880
‫Então eu poderia pegar este componente do braço da mola e alterar o comprimento do braço alvo.

163
00:10:38,880 --> 00:10:46,650
‫Se eu quiser, posso configurá-lo para algo como 600 e posso até alterar sua rotação para que ela incline

164
00:10:46,650 --> 00:10:52,770
‫a câmera para o tanque selecionando o modo de rotação e girando-a um pouco.

165
00:10:52,770 --> 00:10:58,500
‫Como Então agora eu gostaria de salientar que você não deve alterar a localização da câmera.

166
00:10:58,530 --> 00:11:03,990
‫Pode ser tentador selecionar a câmera e movê-la pelo mundo para posicioná-la e

167
00:11:03,990 --> 00:11:05,190
‫incliná-la corretamente.

168
00:11:05,190 --> 00:11:07,350
‫Mas esta não é a maneira correta de fazê-lo.

169
00:11:07,350 --> 00:11:13,410
‫A maneira correta é definir a rotação e o comprimento do braço alvo do componente do braço da mola.

170
00:11:13,410 --> 00:11:17,790
‫E a razão é que você quer essa câmera conectada ao final do braço da mola.

171
00:11:17,790 --> 00:11:23,460
‫O braço da mola tem muitos recursos integrados diferentes, como encolher quando a câmera

172
00:11:23,460 --> 00:11:29,430
‫bate em uma parede para evitar obstáculos, bloqueando a visão da lagoa e outras coisas assim.

173
00:11:29,430 --> 00:11:35,070
‫Então você vai querer que a câmera seja anexada ao final do braço da mola e, em seguida, ajuste

174
00:11:35,070 --> 00:11:39,990
‫o braço da mola em vez de ajustar a posição e a rotação da câmera.

175
00:11:40,110 --> 00:11:47,070
‫Então, neste vídeo, criamos a classe tanque e derivamos da base pond para herdar essas qualidades

176
00:11:47,070 --> 00:11:48,960
‫da classe base pond.

177
00:11:49,140 --> 00:11:56,100
‫Adicionamos um componente de braço de mola e um componente de câmera e os expusemos ao editor usando apenas visível e

178
00:11:56,100 --> 00:11:58,500
‫os colocamos em sua própria categoria.

179
00:11:58,500 --> 00:12:03,900
‫Então estamos nos aproximando do produto final passo a passo, e vamos continuar desenvolvendo esse tanque

180
00:12:03,900 --> 00:12:05,130
‫na próxima palestra.

181
00:12:05,460 --> 00:12:06,510
‫Vejo você em breve.

