﻿1
00:00:04,380 --> 00:00:04,920
‫Ei.

2
00:00:04,920 --> 00:00:05,810
‫Bem vindo de volta.

3
00:00:05,820 --> 00:00:11,610
‫Estamos prontos para terminar nosso jogo, o que significa que restam apenas algumas coisas a fazer para aprimorar

4
00:00:11,610 --> 00:00:15,150
‫nosso jogo e deixá-lo em um estado que nos deixe satisfeitos.

5
00:00:15,150 --> 00:00:17,730
‫Então prepare-se para terminar este jogo.

6
00:00:17,730 --> 00:00:19,170
‫Estamos quase terminando.

7
00:00:19,170 --> 00:00:21,450
‫Vamos apenas adicionar alguns recursos.

8
00:00:21,450 --> 00:00:25,980
‫Eu gostaria de tornar o movimento da câmera um pouco mais suave, então vamos começar com isso.

9
00:00:26,010 --> 00:00:32,130
‫Também notei que as torres ainda disparam projéteis depois que o tanque morre, então podemos fazer uma correção

10
00:00:32,130 --> 00:00:35,250
‫fácil no código para evitar que isso aconteça.

11
00:00:35,250 --> 00:00:40,410
‫E também, vou visitar um possível problema com o ponto de geração de projéteis.

12
00:00:40,410 --> 00:00:43,380
‫Então vamos pular e polir este jogo.

13
00:00:43,740 --> 00:00:46,920
‫Agora, a primeira coisa que eu gostaria de ver é o movimento da câmera.

14
00:00:46,920 --> 00:00:50,670
‫Então, se eu for em frente e apertar o play, vou apenas mostrar o que quero dizer.

15
00:00:50,820 --> 00:00:58,380
‫Conforme eu me movo, você verá que a câmera segue exatamente com o nosso movimento enquanto nos viramos e conforme

16
00:00:58,380 --> 00:01:03,210
‫nos movemos para frente e para trás, a câmera apenas segue automaticamente.

17
00:01:03,210 --> 00:01:08,850
‫Agora, há um bom truque que podemos adicionar a esta câmera que pode torná-la um pouco mais suave.

18
00:01:08,850 --> 00:01:11,730
‫Vamos em frente e abrir o tanque da lagoa BP.

19
00:01:11,940 --> 00:01:16,830
‫Agora aqui no BP Pond Tank, vou selecionar nosso componente de braço de mola.

20
00:01:16,830 --> 00:01:23,580
‫E se eu procurar por câmera lag, vou ver aqui na seção lag, há esta caixa de seleção habilitar

21
00:01:23,580 --> 00:01:24,360
‫câmera lag.

22
00:01:24,390 --> 00:01:28,440
‫Vou verificar isso e ativar o atraso de rotação da câmera.

23
00:01:28,470 --> 00:01:30,240
‫Vou verificar isso também.

24
00:01:30,240 --> 00:01:37,590
‫Agora, isso nos permite que a câmera fique para trás e acompanhe suavemente, o que cria um bom tipo

25
00:01:37,590 --> 00:01:39,780
‫de efeito de câmera profissional.

26
00:01:39,780 --> 00:01:42,810
‫Vamos em frente e aperte o play e teste isso.

27
00:01:42,810 --> 00:01:50,490
‫Então observe enquanto eu me movo, a câmera leva um curto período de tempo para recuperar o atraso enquanto estamos nos movendo.

28
00:01:50,490 --> 00:01:53,190
‫E o mesmo vale para quando estamos girando.

29
00:01:53,190 --> 00:01:59,970
‫Então é como se houvesse um pouco de inércia e a câmera estivesse em algum tipo de pista deslizante e desacelerasse

30
00:01:59,970 --> 00:02:00,840
‫até parar.

31
00:02:00,840 --> 00:02:07,710
‫Agora podemos selecionar o braço da mola e podemos alterar a velocidade do atraso da câmera e a velocidade do atraso de rotação.

32
00:02:07,710 --> 00:02:15,300
‫Então, por exemplo, se eu colocar isso em um valor menor, digamos cinco e cinco em vez de dez, agora vamos dar uma

33
00:02:15,300 --> 00:02:16,950
‫olhada em como fica.

34
00:02:17,040 --> 00:02:21,450
‫Então estou me movendo e você verá que a câmera tem um pouco mais de atraso.

35
00:02:21,450 --> 00:02:25,170
‫Agora, podemos aumentar ou diminuir isso como acharmos melhor.

36
00:02:25,170 --> 00:02:31,170
‫Isso é algo que você pode experimentar e encontrar os valores que funcionam para você.

37
00:02:31,200 --> 00:02:36,930
‫Aqui temos um valor de dois e para mim isso é um atraso um pouco demais.

38
00:02:36,930 --> 00:02:41,100
‫Então eu acho que algo entre cinco e dois funcionaria para mim.

39
00:02:41,100 --> 00:02:46,290
‫Se você gosta desse tipo de valor, talvez você o mantenha em dois ou talvez até mais baixo.

40
00:02:46,290 --> 00:02:54,360
‫Mas vou colocar isso em um valor de, digamos, quatro para a velocidade de atraso da câmera e quatro para a velocidade de atraso de rotação

41
00:02:54,360 --> 00:02:55,320
‫da câmera.

42
00:02:55,350 --> 00:02:57,270
‫Vamos dar uma olhada em como isso se parece.

43
00:02:57,270 --> 00:02:59,850
‫Então, conforme eu me movo, a câmera fica lenta.

44
00:02:59,850 --> 00:03:03,660
‫Há claramente algum atraso na câmera, mas não é muito.

45
00:03:03,660 --> 00:03:09,660
‫Eu acho que isso realmente parece muito bom, então estou bastante satisfeito com isso.

46
00:03:10,320 --> 00:03:15,960
‫Nosso próximo item é a torre disparando depois que o tanque já morreu.

47
00:03:15,960 --> 00:03:18,930
‫Deixe-me ir em frente e mostrar o que quero dizer.

48
00:03:19,020 --> 00:03:19,740
‫Aqui vamos nós.

49
00:03:19,740 --> 00:03:23,880
‫O tanque morreu e as torres ainda estão disparando.

50
00:03:23,970 --> 00:03:26,970
‫Agora, isso é porque o tanque ainda existe.

51
00:03:26,970 --> 00:03:31,290
‫E enquanto estiver ao alcance do fogo, as torres continuarão a disparar.

52
00:03:31,290 --> 00:03:38,130
‫Isso é facilmente tratado por ter um tipo de variável que podemos verificar para ver se o tanque morreu.

53
00:03:38,520 --> 00:03:45,690
‫Então, vou entrar na classe tanque aqui e tanque, e vou adicionar uma variável booleana que podemos verificar para

54
00:03:45,690 --> 00:03:48,690
‫ver se o tanque ainda está vivo.

55
00:03:48,690 --> 00:03:53,580
‫E vou tornar isso público, pois planejamos acessá-lo de fora da classe.

56
00:03:53,580 --> 00:04:00,690
‫Então, vou fazer disso uma variável bull chamada Be Alive, e vou defini-la igual a true por

57
00:04:00,690 --> 00:04:01,500
‫padrão.

58
00:04:01,500 --> 00:04:09,270
‫Portanto, o tanque começará no estado vivo e, à medida que o tanque morrer, vivo será definido como falso.

59
00:04:09,270 --> 00:04:14,130
‫E isso pode acontecer no tanque CP na destruição do cabo.

60
00:04:14,130 --> 00:04:16,530
‫Então vamos lidar com a destruição aqui.

61
00:04:16,530 --> 00:04:23,070
‫E depois de definir essas outras propriedades, vou definir B vivo igual a falso.

62
00:04:23,190 --> 00:04:29,730
‫Então, como estamos definindo B vivo como falso, podemos saber se o tanque morreu e podemos simplesmente

63
00:04:29,730 --> 00:04:33,120
‫evitar o disparo dos projéteis verificando esse booleano.

64
00:04:33,120 --> 00:04:38,790
‫Então vamos para Tower Dot, CP e aqui em check fire condition.

65
00:04:38,790 --> 00:04:42,990
‫Podemos ter certeza de que o tanque ainda está vivo antes de dispararmos.

66
00:04:42,990 --> 00:04:46,290
‫Então, primeiro eu vou ver se o tanque é válido.

67
00:04:46,290 --> 00:04:52,560
‫Vou dizer que se tank for igual a null pointer, então simplesmente retornarei mais cedo.

68
00:04:52,560 --> 00:04:59,010
‫Dessa forma, sabemos que Tank será válido e, em nossa verificação para ver se estamos no alcance de

69
00:04:59,010 --> 00:05:03,420
‫tiro, vou adicionar um e e ver se Tank está vivo.

70
00:05:03,450 --> 00:05:03,870
‫Se tanque.

71
00:05:03,980 --> 00:05:05,830
‫Está vivo, então podemos atirar.

72
00:05:05,840 --> 00:05:08,840
‫Se Tank não estiver vivo, não vamos atirar.

73
00:05:09,020 --> 00:05:14,900
‫Agora, você pode estar se perguntando se é ou não uma boa ideia colocar o retorno em uma única linha como você

74
00:05:14,900 --> 00:05:16,610
‫me viu fazer nos vídeos anteriores.

75
00:05:16,610 --> 00:05:23,960
‫E esta é uma boa oportunidade para discutir Unreal Engines, melhores práticas de programação e recomendações.

76
00:05:23,990 --> 00:05:30,590
‫As práticas de codificação do Unreal Engine recomendam que você tenha chaves com um corpo para todas as suas instruções if,

77
00:05:30,590 --> 00:05:33,080
‫mesmo aquelas que têm uma única instrução.

78
00:05:33,080 --> 00:05:39,200
‫E a razão é porque se você planeja adicionar várias linhas de código a isso, então você já tem

79
00:05:39,200 --> 00:05:40,190
‫o corpo aqui.

80
00:05:40,190 --> 00:05:41,690
‫E também é mais claro.

81
00:05:41,690 --> 00:05:46,160
‫E isso também me leva a outro ponto, que é meu uso de auto.

82
00:05:46,190 --> 00:05:53,720
‫Eu usei auto aqui na classe de projéteis algumas vezes e, embora isso possa ser eficiente, não é tão óbvio

83
00:05:53,720 --> 00:06:01,940
‫quais são os tipos à primeira vista, e é por isso que o uso de auto também não é recomendado em práticas

84
00:06:01,940 --> 00:06:04,220
‫de codificação de mecanismos irreais.

85
00:06:04,220 --> 00:06:09,770
‫Se você quiser seguir as práticas de codificação recomendadas pelo Unreal Engine, poderá substituir essas instâncias

86
00:06:09,770 --> 00:06:11,570
‫de auto pelo tipo real.

87
00:06:11,570 --> 00:06:19,460
‫Por exemplo, aqui, o controlador get instigator retorna um controlador A para que possamos alterá-lo para um controlador e isso

88
00:06:19,550 --> 00:06:20,990
‫é um ponteiro.

89
00:06:20,990 --> 00:06:29,210
‫Essa classe estática do tipo de dano retorna uma classe U para que possamos usar sua classe aqui e, claro, obter o

90
00:06:29,210 --> 00:06:37,940
‫proprietário aqui retorna um ator para que possamos usar um ator em vez de auto aqui e agora, se você olhar para este

91
00:06:37,940 --> 00:06:44,840
‫código, é muito mais óbvio quais são esses tipos, enquanto o auto apenas mascara tudo e permite que

92
00:06:44,840 --> 00:06:48,740
‫você seja preguiçoso e se safar sem digitar os tipos.

93
00:06:48,740 --> 00:06:55,790
‫Agora, às vezes, não tenho certeza do que uma grande expressão retorna, então usarei auto apenas para ver

94
00:06:55,790 --> 00:07:00,410
‫qual é esse tipo e depois o substituirei pelo tipo real.

95
00:07:00,410 --> 00:07:07,880
‫Essa é outra maneira de usar auto para ajudá-lo a aprender os tipos retornados por expressões longas e complicadas como

96
00:07:07,880 --> 00:07:08,540
‫esta.

97
00:07:08,540 --> 00:07:14,120
‫Então, já que estamos nos estágios de polimento, vou substituir auto pelos nomes dos tipos reais

98
00:07:14,120 --> 00:07:15,350
‫aqui no projétil.

99
00:07:15,380 --> 00:07:23,390
‫Eu também vou entrar no peão base na função de fogo onde temos este projétil e isso é retornado

100
00:07:23,390 --> 00:07:25,940
‫desta grande expressão longa aqui.

101
00:07:25,940 --> 00:07:34,550
‫O ator Spawn vai retornar um projétil neste caso para que eu possa substituí-lo por um projétil.

102
00:07:35,640 --> 00:07:36,150
‫OK.

103
00:07:36,150 --> 00:07:39,840
‫Então isso vai polir o código no lado C++.

104
00:07:39,840 --> 00:07:41,850
‫Vamos em frente e compilar isso.

105
00:07:41,850 --> 00:07:47,910
‫E com uma compilação bem sucedida, vamos voltar para o editor e vamos apertar o play e vamos apenas

106
00:07:47,910 --> 00:07:52,890
‫ter certeza de que essas torres param de atirar em nós depois que morremos.

107
00:07:52,890 --> 00:07:54,180
‫Então há um acerto.

108
00:07:55,050 --> 00:08:00,270
‫Há outro, e estou esperando, e não vejo mais projéteis.

109
00:08:00,300 --> 00:08:01,230
‫Perfeito.

110
00:08:01,260 --> 00:08:01,680
‫OK.

111
00:08:01,680 --> 00:08:07,500
‫Então, o último ponto que eu gostaria de abordar antes de encerrarmos isso é o ponto de geração do projétil.

112
00:08:07,530 --> 00:08:14,550
‫Agora, vamos selecioná-lo aqui no BP Pond Tank e ter certeza de que está espaçado o suficiente do

113
00:08:14,550 --> 00:08:15,120
‫barril.

114
00:08:15,150 --> 00:08:19,890
‫Antes de fazermos isso, vou colocá-lo muito, muito próximo e mostrar alguns problemas

115
00:08:19,890 --> 00:08:21,240
‫que podem surgir.

116
00:08:21,270 --> 00:08:27,570
‫Agora, conforme estou avançando e clicando com o botão esquerdo do mouse, você verá que não vejo o projétil.

117
00:08:27,570 --> 00:08:31,530
‫Na verdade, eu não vejo isso porque é muito perto.

118
00:08:31,530 --> 00:08:33,100
‫Já estamos tendo uma colisão.

119
00:08:33,120 --> 00:08:35,970
‫Está sendo destruído antes que possa fazer qualquer coisa.

120
00:08:35,970 --> 00:08:39,810
‫Portanto, certifique-se de que está bem longe do barril.

121
00:08:39,840 --> 00:08:45,960
‫Estamos gerando um pouco de fumaça de qualquer maneira, então vai parecer que um rastro de fumaça está seguindo atrás dele.

122
00:08:45,960 --> 00:08:48,450
‫Portanto, isso ainda parecerá bastante realista.

123
00:08:49,970 --> 00:08:51,250
‫Então isso parece muito bom.

124
00:08:51,260 --> 00:08:58,040
‫E enquanto estamos nos pontos de spawn de projéteis, pode ser uma boa ideia ir e olhar para a torre da lagoa

125
00:08:58,040 --> 00:09:01,010
‫BP e selecionar seu ponto de spawn de projéteis.

126
00:09:01,010 --> 00:09:05,270
‫E se você teve algum problema em gerar projéteis da torre, você

127
00:09:05,270 --> 00:09:10,570
‫pode querer ter certeza de que está a uma boa distância do cano da torre também.

128
00:09:10,580 --> 00:09:11,810
‫Então só temos isso.

129
00:09:11,810 --> 00:09:15,980
‫Temos um jogo funcional e parece fantástico.

130
00:09:15,980 --> 00:09:21,650
‫Temos a capacidade de rolar pelo mundo, temos a capacidade de disparar projéteis e eles

131
00:09:21,650 --> 00:09:22,760
‫explodem coisas.

132
00:09:22,760 --> 00:09:25,190
‫Se atingirmos uma torre, podemos destruí-la.

133
00:09:25,190 --> 00:09:28,430
‫Se a torre nos atingir, pode nos destruir.

134
00:09:29,380 --> 00:09:30,700
‫Bem desse jeito.

135
00:09:30,700 --> 00:09:38,110
‫E temos condições de vitória e derrota com widgets HUD que são exibidos na tela e nos informam se

136
00:09:38,110 --> 00:09:40,330
‫ganhamos ou perdemos o jogo.

137
00:09:40,330 --> 00:09:42,610
‫Então isso é fantástico.

138
00:09:42,610 --> 00:09:48,670
‫E se você quiser empacotar este jogo, pode fazê-lo facilmente indo até o topo e clicando

139
00:09:48,670 --> 00:09:56,710
‫no ícone de plataformas para Windows, se estiver em uma máquina Windows ou para iOS, se estiver usando um mac máquina,

140
00:09:56,710 --> 00:10:00,670
‫então é claro que você tem essas outras opções.

141
00:10:00,670 --> 00:10:06,640
‫Se você quiser empacotar para outras plataformas, recomendo que você faça uma pesquisa on-line para pesquisar as diferentes

142
00:10:06,640 --> 00:10:08,980
‫plataformas e como empacotar para elas.

143
00:10:08,980 --> 00:10:14,920
‫Estou em uma máquina Windows, então posso simplesmente clicar em pacote de projeto para Windows aqui e ele me perguntará

144
00:10:14,920 --> 00:10:17,410
‫onde eu gostaria de empacotar meu jogo.

145
00:10:17,410 --> 00:10:19,780
‫Agora tenho meu projeto aqui no Tune Tanks.

146
00:10:19,780 --> 00:10:24,670
‫Vou clicar com o botão direito do mouse, criar uma nova pasta e simplesmente chamar esse build.

147
00:10:24,670 --> 00:10:29,110
‫Normalmente é onde você colocaria um projeto empacotado.

148
00:10:29,110 --> 00:10:34,720
‫Então, vou selecionar essa pasta e permitir que a Unreal Engine empacote meu jogo.

149
00:10:34,720 --> 00:10:40,300
‫Provavelmente levará alguns minutos e, uma vez feito, devo ter um jogo empacotado.

150
00:10:41,080 --> 00:10:41,530
‫OK.

151
00:10:41,530 --> 00:10:48,070
‫Assim que eu terminar de empacotar, devemos ver a compilação bem-sucedida no log de saída e, em seguida,

152
00:10:48,070 --> 00:10:51,970
‫podemos procurar na pasta que designamos para nosso projeto empacotado.

153
00:10:51,970 --> 00:10:54,670
‫Para mim, será esta pasta de compilação.

154
00:10:54,700 --> 00:11:02,220
‫Agora eu empacotei quatro janelas, então eu tenho uma pasta Windows e aqui estão meus tanques de sintonia, ponto xy.

155
00:11:02,230 --> 00:11:03,490
‫É um executável.

156
00:11:03,520 --> 00:11:08,440
‫Eu posso clicar duas vezes nele e aqui está o meu projeto final.

157
00:11:08,440 --> 00:11:09,490
‫Eu posso atirar.

158
00:11:09,580 --> 00:11:11,260
‫posso me esquivar.

159
00:11:11,990 --> 00:11:18,110
‫Parece que minhas torres inimigas podem atirar em mim e eu posso destruí-las.

160
00:11:18,110 --> 00:11:19,550
‫Sim, eu posso destruí-los.

161
00:11:19,550 --> 00:11:23,240
‫Eles podem me destruir, parece, e eu posso perder o jogo.

162
00:11:23,360 --> 00:11:26,990
‫E, claro, se eu fosse um pouco mais habilidoso, poderia ganhar o jogo.

163
00:11:27,170 --> 00:11:33,230
‫E para seu desafio final, vou encarregá-lo de adicionar seu próprio sabor ao jogo.

164
00:11:33,230 --> 00:11:35,420
‫Torne este jogo seu.

165
00:11:35,420 --> 00:11:42,200
‫Encontre alguns novos sons ou efeitos ou malhas e crie algumas torres e tanques de aparência divertida.

166
00:11:42,200 --> 00:11:48,410
‫Adicione mais torres, talvez adicione diferentes níveis de habilidade, torne as torres cada vez mais difíceis à medida que você progride

167
00:11:48,410 --> 00:11:49,580
‫em seu nível.

168
00:11:49,580 --> 00:11:56,480
‫Talvez aumente o nível do tanque, dê um nível que você possa aumentar à medida que destrói mais e mais torres.

169
00:11:56,480 --> 00:12:03,980
‫Talvez você possa adicionar nova geometria de nível e fazer o tanque subir rampas e tentar destruir tanques em áreas

170
00:12:03,980 --> 00:12:05,330
‫de difícil acesso.

171
00:12:05,360 --> 00:12:09,050
‫As possibilidades são infinitas, mas o mais importante, divirta-se.

172
00:12:09,050 --> 00:12:10,700
‫Enquanto você está desenvolvendo seus jogos.

173
00:12:10,700 --> 00:12:13,160
‫Você não vai pausar o vídeo para este desafio.

174
00:12:13,160 --> 00:12:19,070
‫Isso será algo que você poderá fazer a partir de agora com seus projetos de jogos.

175
00:12:19,070 --> 00:12:20,630
‫Então parabéns.

176
00:12:20,630 --> 00:12:21,980
‫Terminamos nosso jogo.

177
00:12:21,980 --> 00:12:23,750
‫Espero que tenha gostado desta seção.

178
00:12:23,750 --> 00:12:25,460
‫Eu me diverti muito.

179
00:12:25,460 --> 00:12:28,790
‫Este é um grande projeto de jogo e você percorreu um longo caminho.

180
00:12:28,790 --> 00:12:34,070
‫Você aprendeu muitas habilidades ao longo desta seção do curso, então espero que esteja pronto para

181
00:12:34,070 --> 00:12:35,930
‫passar para coisas mais empolgantes.

182
00:12:35,930 --> 00:12:36,890
‫Muito obrigado.

183
00:12:36,890 --> 00:12:39,770
‫Eu sou Steven e nos vemos em breve.

