﻿1
00:00:04,530 --> 00:00:06,030
‫Olá e bem-vindo.

2
00:00:06,060 --> 00:00:10,920
‫Nesta palestra, vamos criar uma arma e vamos aprender como vamos arquitetar armas

3
00:00:10,920 --> 00:00:17,250
‫para este jogo para que possam ser trocadas, para que possamos ter diferentes propriedades em diferentes tipos

4
00:00:17,250 --> 00:00:18,090
‫de armas.

5
00:00:18,480 --> 00:00:24,810
‫E geralmente é assim que as arquiteturas funcionam em jogos de tiro em primeira ou terceira pessoa, vamos mergulhar e ver como isso

6
00:00:24,810 --> 00:00:25,650
‫é feito.

7
00:00:27,060 --> 00:00:27,300
‫OK.

8
00:00:27,300 --> 00:00:30,630
‫Portanto, não verificamos nosso plano de projeto há algum tempo.

9
00:00:31,020 --> 00:00:32,600
‫Não chegamos ao movimento do plano.

10
00:00:32,610 --> 00:00:35,160
‫Está feita a animação por enquanto, está feita.

11
00:00:35,520 --> 00:00:39,180
‫E a filmagem, essa é a próxima coisa em que devemos nos concentrar.

12
00:00:39,690 --> 00:00:45,570
‫Agora, é um pouco confuso aqui porque nossa malha já parece ter uma arma, mas na verdade não

13
00:00:45,570 --> 00:00:47,220
‫queremos usar essa arma.

14
00:00:47,220 --> 00:00:49,110
‫Queremos usá-lo de uma maneira diferente.

15
00:00:49,650 --> 00:00:55,950
‫Por estar em um tipo de jogo de tiro, muitas vezes você quer poder alternar entre armas ou

16
00:00:56,280 --> 00:00:59,160
‫pelo menos ter personagens diferentes, armas diferentes.

17
00:00:59,490 --> 00:01:05,790
‫E a maneira mais fácil de fazer isso é arquitetar a arma como uma coisa separada do personagem para que

18
00:01:05,790 --> 00:01:09,720
‫você possa trocá-las para que ele possa ser responsável por como atira.

19
00:01:09,780 --> 00:01:14,760
‫Se for um lançador de foguetes, uma espingarda ou um rifle, eles farão as coisas de maneiras diferentes.

20
00:01:15,450 --> 00:01:20,670
‫Agora, você pode dizer, ok, bem, vamos criar um componente de arma e podemos colocar esses componentes de

21
00:01:21,000 --> 00:01:22,380
‫arma sob nossa malha.

22
00:01:22,770 --> 00:01:30,390
‫Isso funcionaria, exceto que perdemos a modularidade que nos permite adicionar vários componentes à

23
00:01:30,390 --> 00:01:31,110
‫arma.

24
00:01:31,500 --> 00:01:38,700
‫Então, o que realmente queremos fazer é seguir o caminho de ter um ator para a arma que é a identificação infantil do

25
00:01:38,700 --> 00:01:39,780
‫personagem do atirador.

26
00:01:39,810 --> 00:01:43,590
‫Agora, isso é algo que não encontramos antes, mas funciona assim.

27
00:01:44,310 --> 00:01:51,150
‫Você pode ter um personagem atirador e uma arma como filho, e o personagem atirador pode ter vários componentes que

28
00:01:51,150 --> 00:01:53,010
‫são filhos um do outro.

29
00:01:53,010 --> 00:01:58,350
‫Então você tem a cápsula, nós temos a malha como filha da cápsula no momento, e

30
00:01:58,350 --> 00:02:01,710
‫os componentes da arma podem ser protegidos contra isso.

31
00:02:02,010 --> 00:02:05,700
‫Assim, a malha obtém o ID filho da malha do personagem.

32
00:02:06,150 --> 00:02:11,460
‫E se tiver outros componentes, como talvez um efeito de partícula no cano da arma, isso pode ser

33
00:02:11,460 --> 00:02:13,110
‫o ID filho da malha.

34
00:02:13,410 --> 00:02:19,590
‫Então você pode ver que essas hierarquias são meio independentes, que você tem os componentes da

35
00:02:19,590 --> 00:02:25,560
‫cena, aqueles que se transformaram à direita, e eles podem estar em uma certa hierarquia.

36
00:02:25,980 --> 00:02:31,280
‫E então a hierarquia de atores realmente segue a hierarquia dos componentes da cena.

37
00:02:31,290 --> 00:02:33,240
‫Os atores não têm uma hierarquia própria.

38
00:02:33,240 --> 00:02:35,580
‫Esta é a parte que leva um pouco de tempo para entender.

39
00:02:35,580 --> 00:02:38,070
‫Foi um momento aha quando clicou para mim.

40
00:02:38,520 --> 00:02:44,580
‫Será que na verdade não existe hierarquia de atores, existe apenas uma hierarquia de componentes de cena.

41
00:02:44,940 --> 00:02:50,430
‫Existem atores que possuem os mesmos componentes e então eles acabam tendo uma hierarquia porque seus

42
00:02:50,430 --> 00:02:55,950
‫componentes de cena estão relacionados entre si, mas na verdade eles não têm uma relação entre si.

43
00:02:56,670 --> 00:03:02,760
‫Dito isso, para definir o contexto, a primeira coisa que queremos fazer é realmente criar

44
00:03:02,760 --> 00:03:05,190
‫um ator de armas C++.

45
00:03:05,670 --> 00:03:11,730
‫E neste caso, não será um peão ou personagem ou algo assim.

46
00:03:11,730 --> 00:03:14,400
‫Vai ser um ator direto porque não precisamos de nenhum comportamento.

47
00:03:14,400 --> 00:03:16,290
‫Você não precisa possuí-lo, nós não precisamos fazer nada.

48
00:03:16,290 --> 00:03:17,880
‫É apenas um ator simples, simples.

49
00:03:18,390 --> 00:03:19,710
‫Então vamos em frente e fazer isso.

50
00:03:19,710 --> 00:03:21,030
‫Na verdade, um pequeno desafio para você.

51
00:03:21,030 --> 00:03:26,190
‫Vá em frente e crie esse ator C++, algo que você deve ser capaz de fazer um pequeno minidesafio, tente.

52
00:03:26,760 --> 00:03:27,780
‫Ok, estou de volta.

53
00:03:27,780 --> 00:03:28,860
‫Eu estou indo fazer isso.

54
00:03:28,890 --> 00:03:34,470
‫Nova classe C++ e não precisamos de vamos ver, ator.

55
00:03:34,470 --> 00:03:35,490
‫Isso é tudo o que queremos escolher.

56
00:03:35,910 --> 00:03:42,060
‫E vamos em frente e chamar isso de uma arma, simples como vamos criar essa classe.

57
00:03:42,330 --> 00:03:42,550
‫Ok?

58
00:03:42,570 --> 00:03:46,350
‫E uma vez feito isso, ele aparecerá no seu editor de código.

59
00:03:46,380 --> 00:03:52,170
‫E não precisamos fazer nada com isso ainda porque a primeira coisa que quero fazer é criar uma subclasse

60
00:03:52,530 --> 00:03:53,340
‫de blueprint.

61
00:03:53,340 --> 00:03:59,370
‫Então, clique com o botão direito na sua classe no navegador de conteúdo e em vez de chamá-la de Mike e eu não sei

62
00:03:59,370 --> 00:04:04,530
‫quais padrões automáticos essa arma de sublinhado da BP, vou colocá-la na raiz do conteúdo quatro Agora podemos fazer um

63
00:04:04,530 --> 00:04:06,630
‫pouco de reorganizando assim que tivermos mais turmas.

64
00:04:06,900 --> 00:04:09,750
‫Como eu disse antes, vamos criar a classe Blueprint.

65
00:04:09,750 --> 00:04:10,890
‫Como você pode ver, está completamente vazio.

66
00:04:10,890 --> 00:04:12,450
‫Ele tem essa raiz de cena padrão.

67
00:04:12,840 --> 00:04:14,340
‫Nós vamos querer consertar isso.

68
00:04:14,470 --> 00:04:20,460
‫O que queremos fazer é adicionar um componente em C++ porque este é um curso de C++.

69
00:04:20,460 --> 00:04:23,970
‫Vamos praticar o músculo de adicionar componentes em C++.

70
00:04:24,150 --> 00:04:29,700
‫Isso também significa que teremos acesso a esses componentes de dentro de nosso código C++ para manipular e

71
00:04:29,700 --> 00:04:35,520
‫escrever nosso código que agora a configuração que queremos é ter um componente raiz de cena, que será apenas

72
00:04:35,520 --> 00:04:39,450
‫componentes de cena e, em seguida, uma malha que é filha disso.

73
00:04:39,450 --> 00:04:40,230
‫Por que queremos isso?

74
00:04:40,230 --> 00:04:47,730
‫Porque queremos poder alterar a posição da malha em relação às raízes da arma para que possamos basicamente

75
00:04:47,730 --> 00:04:52,110
‫colocar a alça em locais diferentes para malhas diferentes.

76
00:04:52,110 --> 00:04:55,440
‫Então, se tivermos armas diferentes, podemos garantir que todas tenham as alças no mesmo lugar.

77
00:04:55,440 --> 00:05:00,540
‫Então, quando o anexamos à mão do personagem, ele aparecerá com a alça na mão do personagem.

78
00:05:01,230 --> 00:05:02,580
‫Ok, então como vamos fazer isso?

79
00:05:02,580 --> 00:05:08,550
‫Vamos para o nosso código do Visual Studio, e vou criar uma seção privada aqui onde vamos

80
00:05:08,850 --> 00:05:12,630
‫armazenar as novas propriedades para os diferentes componentes que vamos

81
00:05:12,630 --> 00:05:13,050
‫criar.

82
00:05:13,590 --> 00:05:17,130
‫Então vou criar uma nova propriedade visível em qualquer lugar.

83
00:05:17,610 --> 00:05:21,210
‫Queremos que nossos componentes sejam visíveis em qualquer lugar porque seus ponteiros

84
00:05:21,210 --> 00:05:26,370
‫de ponto, não queremos poder editar os ponteiros, mas queremos poder ver as propriedades desses ponteiros e poder.

85
00:05:26,600 --> 00:05:26,960
‫Aqueles.

86
00:05:26,960 --> 00:05:30,830
‫E isso se torna o alcance da classe para a qual estamos apontando.

87
00:05:30,950 --> 00:05:34,550
‫Isso então decide o que é mostrado, o que é editável.

88
00:05:34,580 --> 00:05:38,240
‫Então, tudo o que queremos dizer aqui é que não é o ponto de ser editável.

89
00:05:38,510 --> 00:05:39,980
‫Então é por isso que ir para visível de qualquer maneira.

90
00:05:40,580 --> 00:05:41,630
‫Enfim, um pouco de revisão lá.

91
00:05:41,930 --> 00:05:44,960
‫Agora queremos que isso seja uma visão porque é um componente.

92
00:05:44,960 --> 00:05:48,470
‫Então é um componente de cena que estamos querendo.

93
00:05:49,250 --> 00:05:54,710
‫Se eu puder digitá-lo corretamente, eu vi componentes e é um ponteiro para ele e este

94
00:05:54,710 --> 00:05:56,270
‫será nosso componente raiz.

95
00:05:57,690 --> 00:05:58,170
‫Igual a.

96
00:05:58,830 --> 00:06:01,410
‫E então vamos querer uma nova propriedade.

97
00:06:02,310 --> 00:06:03,610
‫Novamente visível em qualquer lugar.

98
00:06:03,840 --> 00:06:05,460
‫Para nossa malha.

99
00:06:07,080 --> 00:06:16,200
‫A classe para a malha será composta por alguns componentes estáticos do MASH, porque não é uma massa esquelética,

100
00:06:16,200 --> 00:06:19,620
‫é rígida, não tem esqueleto, nenhum osso.

101
00:06:20,040 --> 00:06:24,690
‫Então, eu quero que isso seja um indicador e isso só vai esfriar o mash assim.

102
00:06:25,750 --> 00:06:30,170
‫Fato, acho que preciso ter um pouco de cuidado aqui porque acho que o componente raiz já existe

103
00:06:30,170 --> 00:06:31,770
‫na classe pai para o ator.

104
00:06:31,790 --> 00:06:34,280
‫Então, eu vou chamar essa rota em vez disso.

105
00:06:35,180 --> 00:06:38,840
‫E então já temos um construtor no C++.

106
00:06:38,840 --> 00:06:42,380
‫Nós vamos precisar incluir o apropriado -- aqui.

107
00:06:42,410 --> 00:06:46,200
‫Agora, um pequeno truque quando você está no código do Visual Studio é descobrir onde um arquivo pode estar à frente.

108
00:06:46,200 --> 00:06:50,600
‫Você usa o Control P e vai procurar.

109
00:06:50,810 --> 00:06:53,090
‫Neste caso, queremos a malha estática.

110
00:06:53,090 --> 00:07:01,910
‫Portanto, componentes de malha estática e podemos ver que os componentes de malha estática h se eu for em frente e abri-lo e passar

111
00:07:01,910 --> 00:07:07,400
‫o mouse sobre a guia, você poderá ver que está sob esse longo caminho.

112
00:07:07,400 --> 00:07:12,590
‫Mas o que é interessante é que está em classes, que então podemos olhar para

113
00:07:12,590 --> 00:07:19,580
‫os componentes, componentes de malha estática, para que eu possa fechar essa guia e logo acima incluir um fato abaixo

114
00:07:19,580 --> 00:07:21,440
‫do include para uma arma.

115
00:07:21,740 --> 00:07:28,940
‫Faremos uma inclusão de hash para os componentes e, em seguida, para os componentes de malha estática.

116
00:07:29,570 --> 00:07:35,630
‫Agora, na verdade, acabei de lembrar que as malhas que temos por algum motivo não são malhas estáticas como

117
00:07:35,630 --> 00:07:37,040
‫acredito que possam ser.

118
00:07:37,040 --> 00:07:43,790
‫Scott The Meshes, você pode descobrir isso acessando os pacotes de ativos, armas de jogos de tiro e dando uma

119
00:07:43,790 --> 00:07:44,960
‫olhada nessas malhas.

120
00:07:44,960 --> 00:07:48,380
‫E com certeza, se você passar o mouse sobre eles, poderá ver que são malhas esqueléticas.

121
00:07:48,710 --> 00:07:49,760
‫Não me pergunte por quê.

122
00:07:49,820 --> 00:07:51,710
‫Por alguma razão, é isso que eles são.

123
00:07:52,280 --> 00:07:56,780
‫Então, vamos querer mudar o tipo para malha esquelética no arquivo de cabeçalho.

124
00:07:56,780 --> 00:08:01,310
‫Então, em vez da malha estática, será usada a malha esquelética.

125
00:08:01,610 --> 00:08:05,990
‫E o mesmo para a inclusão será o esqueleto.

126
00:08:07,280 --> 00:08:09,500
‫Componente de malha ponto h que queremos lembrar.

127
00:08:09,500 --> 00:08:11,180
‫Não há você nos arquivos de cabeçalho.

128
00:08:12,420 --> 00:08:15,420
‫E acredito que os mesmos componentes já incluídos aqui por padrão.

129
00:08:15,870 --> 00:08:20,260
‫Então é hora de um desafio para adicionar um componente de malha de sua preferência.

130
00:08:20,280 --> 00:08:27,390
‫Vamos criar um componente de cena raiz, defini-lo como raiz e defini-lo como raiz para a classe e criar um componente

131
00:08:27,840 --> 00:08:33,240
‫de malha e configurar o anexo entre os dois para que o componente de malha

132
00:08:33,240 --> 00:08:37,320
‫seja um filho dessa raiz vista componentes, vídeo pulsado e experimente.

133
00:08:37,710 --> 00:08:38,790
‫Ok, bem-vindo de volta.

134
00:08:38,790 --> 00:08:42,660
‫Então, vamos passar por cima e estabelecer, em primeiro lugar, nossas raízes.

135
00:08:42,930 --> 00:08:48,180
‫Será um sub-objeto padrão de criação do tipo.

136
00:08:48,600 --> 00:08:56,100
‫Você viu componentes e então vamos dar um nome que vai ser com a macro de texto, vamos chamá-la de

137
00:08:56,100 --> 00:08:59,490
‫raízes e terminar com o ponto e vírgula.

138
00:08:59,490 --> 00:09:01,530
‫Então vamos defini-lo como a raiz.

139
00:09:01,530 --> 00:09:06,180
‫Portanto, definir componentes raiz o definirá como o componente raiz para o ator.

140
00:09:06,180 --> 00:09:07,890
‫Portanto, defina root como o componente raiz.

141
00:09:08,370 --> 00:09:09,180
‫Coisa boa.

142
00:09:09,600 --> 00:09:12,270
‫Então vamos querer criar nossa malha.

143
00:09:12,450 --> 00:09:21,420
‫Então, mesh é igual a criar um subobjeto padrão e é o componente de malha esquelética que queremos como classe e, em

144
00:09:21,420 --> 00:09:27,720
‫seguida, a macro de texto para chamá-la de malha e adicionar um ponto e vírgula.

145
00:09:27,790 --> 00:09:29,880
‫E então queremos configurar o anexo.

146
00:09:30,210 --> 00:09:34,110
‫Então, será uma seta de malha configurada.

147
00:09:35,210 --> 00:09:42,890
‫Configure o anexo e vamos querer anexar à raiz como coisas tão legais para que possamos ir em frente

148
00:09:42,890 --> 00:09:50,420
‫e salvá-lo e, com sorte, compilar e construir e vamos para o Unreal e dê uma olhada em nossa

149
00:09:50,420 --> 00:09:51,470
‫classe filha.

150
00:09:51,890 --> 00:09:57,260
‫E com certeza, aqui temos as raízes, temos a submalha, também temos essa raiz de cena padrão que

151
00:09:57,260 --> 00:10:02,270
‫está por aí, acho que vamos reiniciar o editor e ver se isso simplesmente desaparece.

152
00:10:02,780 --> 00:10:06,980
‫Às vezes, ao adicionar componentes, as coisas podem ficar assim e serem armazenadas em cache.

153
00:10:07,370 --> 00:10:11,840
‫E com certeza, se abrirmos os projetos das armas BP novamente, você pode ver que acabamos de receber esses

154
00:10:11,840 --> 00:10:12,440
‫dois componentes.

155
00:10:12,440 --> 00:10:18,530
‫Adicionamos as raízes e a malha, e provavelmente queremos ir em frente e trocar a malha por uma das malhas

156
00:10:18,530 --> 00:10:21,470
‫esqueléticas dos pacotes de ativos do jogo de tiro.

157
00:10:21,950 --> 00:10:23,210
‫Temos um rifle, temos um lançador.

158
00:10:23,210 --> 00:10:25,670
‫Eu vou escolher este para ser o rifle.

159
00:10:26,060 --> 00:10:30,230
‫Então, na verdade, chamá-lo de uma arma BP é um pouco falso.

160
00:10:30,230 --> 00:10:32,780
‫Este provavelmente deve ser o rifle BP.

161
00:10:32,780 --> 00:10:40,130
‫Então vamos em frente e renomeie isso, vá até o navegador de conteúdo e renomeie para BP Rifle ou BP

162
00:10:40,130 --> 00:10:41,570
‫Gun, underscore rifle.

163
00:10:41,570 --> 00:10:44,660
‫Agora colete o rifle BP diretamente para eles.

164
00:10:45,080 --> 00:10:47,600
‫E isso nos deu uma arma.

165
00:10:47,600 --> 00:10:54,350
‫Agora, obviamente, agora isso significa que podemos ter todos os tipos de propriedades contra esse ator, como

166
00:10:54,350 --> 00:11:00,950
‫a força da arma, seu alcance e assim por diante, criando novas propriedades em C++.

167
00:11:00,950 --> 00:11:08,030
‫E essa é a força de ter essa arquitetura é que as armas podem ser um pouco diferentes.

168
00:11:08,030 --> 00:11:15,590
‫Podemos ter diferentes mecânicas de tiro para rifles versus atiradores versus RPG e coisas assim.

169
00:11:16,040 --> 00:11:17,420
‫Então isso é ótimo.

170
00:11:17,420 --> 00:11:18,800
‫E também podemos ter estatísticas diferentes.

171
00:11:18,800 --> 00:11:23,480
‫Assim, podemos ter um rifle forte e um rifle fraco dependendo das diferentes subclasses do projeto.

172
00:11:23,780 --> 00:11:24,320
‫Coisas legais.

173
00:11:24,320 --> 00:11:29,720
‫Agora, na próxima palestra, vamos ver como vamos realmente gerar essa arma como um

174
00:11:30,050 --> 00:11:32,420
‫filho de nosso personagem atual.

175
00:11:32,660 --> 00:11:33,320
‫Eu vou ver isso.

