﻿1
00:00:04,710 --> 00:00:05,580
‫Olá e bem-vindo.

2
00:00:05,580 --> 00:00:10,890
‫Nesta palestra, vamos fazer a condição de vitória funcionar para que eu possa matar todos os inimigos do

3
00:00:10,890 --> 00:00:14,160
‫meu nível e isso me mostrará essa tela de vitória.

4
00:00:14,160 --> 00:00:16,320
‫HAREL Vamos mergulhar e ver como é feito.

5
00:00:17,830 --> 00:00:22,170
‫Por isso, gostaríamos que fosse possível ao nosso jogador ganhar este jogo.

6
00:00:22,180 --> 00:00:23,500
‫No momento não podem.

7
00:00:24,040 --> 00:00:25,060
‫Então, como vamos fazer isso?

8
00:00:25,090 --> 00:00:27,020
‫Bem, você pode fazer isso de várias maneiras.

9
00:00:27,040 --> 00:00:32,710
‫Um deles seria quando Pawn Killed é chamado e o peão não é o controlador de jogo.

10
00:00:32,710 --> 00:00:39,280
‫Mas então poderíamos subtrair de uma variável que diz quantos ar há no mundo, quantos temos que

11
00:00:39,280 --> 00:00:39,910
‫matar.

12
00:00:40,120 --> 00:00:43,750
‫E então, quando isso chegar a zero, podemos terminar o jogo em favor do jogador.

13
00:00:43,840 --> 00:00:49,480
‫No entanto, acho que é um pouco frágil porque exige que coloquemos quantos inimigos existem no mundo em dois lugares, essencialmente

14
00:00:49,480 --> 00:00:54,160
‫precisa estar no modo de jogo, mas também precisa estar no mundo quando você está colocando o

15
00:00:54,160 --> 00:00:58,720
‫inimigos para baixo e esses dois podem ficar fora de sincronia, e isso vai causar alguns

16
00:00:58,720 --> 00:00:59,320
‫problemas.

17
00:00:59,860 --> 00:01:05,710
‫Então, a maneira que eu preferiria fazer isso é simplesmente dizer, vamos contar todos os inimigos no mundo toda vez que um peão é morto, vamos fazer uma

18
00:01:05,710 --> 00:01:11,740
‫recontagem, uma contagem de cabeça de todos os A. EU. e veja quais ainda

19
00:01:11,740 --> 00:01:12,910
‫estão vivos.

20
00:01:13,030 --> 00:01:16,390
‫Se algum deles ainda estiver vivo, não vamos terminar o jogo ainda.

21
00:01:16,640 --> 00:01:17,590
‫Coloque o jogo não acabou.

22
00:01:17,920 --> 00:01:22,840
‫Mas se eles estão todos mortos e o controle de jogo não, então o jogador ganhou.

23
00:01:23,620 --> 00:01:29,170
‫Então, para que possamos fazer isso, precisamos ter uma maneira de consultar um controlador de jogador para saber se ele está morto

24
00:01:29,170 --> 00:01:29,920
‫ou não.

25
00:01:30,100 --> 00:01:31,930
‫Desculpe, quero dizer, o controlador.

26
00:01:32,410 --> 00:01:35,770
‫Então, vamos procurar nosso controlador de atirador dot H.

27
00:01:36,460 --> 00:01:41,740
‫E o que queremos fazer aqui é criar um novo método público que nos permita consultar se está morto ou

28
00:01:41,740 --> 00:01:42,280
‫não.

29
00:01:42,430 --> 00:01:49,270
‫Então, vamos fazer um pool baseado, está morto, e será um contraste porque não deve mudar o que

30
00:01:49,270 --> 00:01:52,660
‫realmente está acontecendo no controlador quando é chamado.

31
00:01:53,530 --> 00:01:55,540
‫E podemos ir em frente e criar uma implementação.

32
00:01:56,570 --> 00:02:01,740
‫Agora deveríamos estar controlando um -- que pode nos dizer se está morto ou não.

33
00:02:01,760 --> 00:02:07,730
‫Se formos dar uma olhada nisso novamente, veremos o personagem do atirador, que é um --.

34
00:02:07,730 --> 00:02:12,020
‫Lembre-se, já temos essa função de contato morto lá.

35
00:02:12,230 --> 00:02:17,180
‫Então, essencialmente, o que queremos fazer é apenas passar o pedido para o atirador que eu controlo agora.

36
00:02:17,480 --> 00:02:17,940
‫Sim.

37
00:02:17,960 --> 00:02:23,660
‫Uma coisa é, você poderia dizer no modo de jogo todo em KML, você poderia pegar

38
00:02:23,660 --> 00:02:30,110
‫o controle, pegar o -- aquilo que está controlando, fazer um cast e então verificar se aquilo -- está morto.

39
00:02:30,530 --> 00:02:36,350
‫No entanto, isso geralmente não é a melhor prática porque significa que, se de repente algo

40
00:02:36,350 --> 00:02:43,460
‫mudar sobre como calculamos a morte e ou o controlador aéreo controlar diferentes tipos de --, de repente precisamos mudar

41
00:02:43,460 --> 00:02:46,840
‫o modo de jogo, o que não faz sentido.

42
00:02:46,850 --> 00:02:52,340
‫Então é melhor fazer isso e fazer a passagem dentro dos controladores de ar mais robustos.

43
00:02:52,670 --> 00:02:58,730
‫Isso nos impede de mexer no interior da classe de outra pessoa, o que geralmente significa que podemos restringir

44
00:02:58,730 --> 00:03:04,280
‫quando as coisas mudam, podemos restringir quantas classes temos que ir e tocar, atualizar e mudar, o

45
00:03:04,280 --> 00:03:06,680
‫que é sempre uma coisa boa.

46
00:03:07,490 --> 00:03:13,130
‫Então, o que vamos querer fazer é pegar o -- e lançar o -- para ter certeza de que é um personagem de tiro.

47
00:03:13,130 --> 00:03:14,150
‫Então vamos fazer um elenco.

48
00:03:14,660 --> 00:03:17,030
‫Vai ser para um atirador.

49
00:03:18,010 --> 00:03:23,200
‫Personagem e acho que vamos precisar fazer isso tem que incluir no topo do controle dos olhos para ter certeza

50
00:03:23,200 --> 00:03:25,720
‫de que sabemos sobre o personagem de tiros assim.

51
00:03:26,230 --> 00:03:34,120
‫E então vamos fazer o elenco fazendo um get -- e vamos querer armazenar isso em uma variável

52
00:03:34,420 --> 00:03:36,790
‫para que seja um shooter.

53
00:03:37,030 --> 00:03:42,370
‫Ponteiro de caractere chamado vamos chamá-lo de controlado.

54
00:03:43,770 --> 00:03:44,490
‫Personagem.

55
00:03:46,000 --> 00:03:52,360
‫Eu não posso simplesmente chamar de caractere porque isso já é uma variável no controlador aéreo e colocar um ponto e vírgula

56
00:03:52,360 --> 00:03:56,440
‫no final da linha e vamos verificar se isso é nulo ou não.

57
00:03:57,070 --> 00:04:03,730
‫Portanto, o caractere de controle não é igual ao ponteiro nulo, então devemos poder consultá-lo para saber se está morto

58
00:04:03,730 --> 00:04:04,720
‫ou não.

59
00:04:05,140 --> 00:04:09,910
‫Portanto, devemos ser capazes de retornar o personagem controlado.

60
00:04:11,070 --> 00:04:12,120
‫Está morto.

61
00:04:12,780 --> 00:04:16,170
‫Basicamente, encaminhamos a solicitação para nosso personagem de controle.

62
00:04:16,500 --> 00:04:18,630
‫Se esse personagem de controle for um personagem de tiro.

63
00:04:19,110 --> 00:04:22,260
‫No entanto, observe aqui que não temos uma instrução de retorno.

64
00:04:22,260 --> 00:04:24,720
‫No outro caso, precisamos ter um retorno.

65
00:04:24,960 --> 00:04:26,580
‫Sempre tem que haver um retorno.

66
00:04:26,850 --> 00:04:28,890
‫Se o valor de retorno não for nulo.

67
00:04:29,280 --> 00:04:35,370
‫Portanto, precisamos colocar uma instrução return aqui fora da instrução if para capturar o caso em que ainda

68
00:04:35,370 --> 00:04:37,680
‫não retornamos dentro da instrução if.

69
00:04:38,160 --> 00:04:40,890
‫E aqui vamos apenas dizer, esse personagem está morto?

70
00:04:40,920 --> 00:04:46,230
‫Bem, sim, essencialmente, se não é tão verdade, basicamente está morto.

71
00:04:46,650 --> 00:04:52,200
‫Se não tivermos um peão, se não estivermos controlando um peão, então essencialmente esse controlador aéreo está

72
00:04:52,200 --> 00:04:53,610
‫praticamente morto para nós.

73
00:04:54,120 --> 00:05:00,090
‫E isso pode acontecer porque lembre-se de que o peão se desprende de seu controlador quando morre.

74
00:05:01,110 --> 00:05:06,390
‫Então, vamos voltar ao modo de jogo e o que vamos querer fazer aqui?

75
00:05:07,080 --> 00:05:14,340
‫Essencialmente, o que queremos fazer é um loop completo sobre todos os i.

76
00:05:14,340 --> 00:05:16,410
‫O atirador, i.

77
00:05:17,730 --> 00:05:19,050
‫No mundo.

78
00:05:20,230 --> 00:05:22,120
‫E com isso for loop.

79
00:05:22,690 --> 00:05:23,530
‫O que nós queremos fazer?

80
00:05:23,740 --> 00:05:25,690
‫Queremos ver está morto.

81
00:05:27,400 --> 00:05:32,080
‫Basicamente e ou basicamente não está morto.

82
00:05:33,100 --> 00:05:39,320
‫E se algum deles não estiver morto, saberemos instantaneamente que não precisamos verificar todo o ar.

83
00:05:39,340 --> 00:05:44,080
‫Se apenas um cara reinar vivo, então o jogo não acabou.

84
00:05:44,080 --> 00:05:49,120
‫Assim, podemos fazer o que é conhecido como retorno antecipado, que você provavelmente

85
00:05:49,120 --> 00:05:54,180
‫já viu antes, que é simplesmente sair dessa função sem executar mais nenhum código nela.

86
00:05:54,190 --> 00:05:58,540
‫Portanto, tudo após esse retorno antecipado parará de executar o loop completo, parará de executar qualquer coisa depois

87
00:05:58,540 --> 00:05:59,770
‫de parar de executar.

88
00:06:00,640 --> 00:06:07,180
‫Mas então podemos dizer que se conseguimos passar com sucesso por esse ciclo completo sem retornar

89
00:06:07,180 --> 00:06:14,230
‫cedo, o que significa que não há aliados vivos no mundo, precisamos seguir em frente e terminar o jogo.

90
00:06:15,070 --> 00:06:15,850
‫Simples assim.

91
00:06:16,150 --> 00:06:22,460
‫Agora, uma parte do quebra-cabeça que precisamos ver aqui são as chamadas de fim de jogo.

92
00:06:22,780 --> 00:06:25,780
‫O jogo terminou no controlador do jogador.

93
00:06:25,840 --> 00:06:29,170
‫Vamos dar uma olhada em como o controlador do jogador de tiro atualmente lida com isso.

94
00:06:29,200 --> 00:06:35,650
‫Se formos para o seu CP, o que vemos atualmente é que ele está ignorando totalmente o B é o vencedor

95
00:06:35,650 --> 00:06:38,350
‫está ignorando se é ou não o vencedor.

96
00:06:39,340 --> 00:06:43,900
‫Então, o que precisamos fazer é dizer se B é o vencedor.

97
00:06:45,030 --> 00:06:48,270
‫Então vamos fazer outra coisa diferente.

98
00:06:49,080 --> 00:06:51,840
‫Vamos exibir nossa tela de perda.

99
00:06:52,110 --> 00:06:55,890
‫Então corte essas linhas aqui que são responsáveis por exibir a tela de perda.

100
00:06:55,890 --> 00:06:59,940
‫Coloque isso na declaração out e reiniciaremos em ambos os casos de qualquer maneira.

101
00:07:00,810 --> 00:07:02,580
‫Então, atualmente, o ser é o vencedor.

102
00:07:02,580 --> 00:07:03,460
‫O que nós vamos fazer?

103
00:07:03,480 --> 00:07:11,550
‫Bem, vamos em frente e provavelmente também criaremos uma proteção contra o vento, o que será bastante

104
00:07:11,550 --> 00:07:12,410
‫simples.

105
00:07:12,420 --> 00:07:16,200
‫Vamos para o nosso arquivo de cabeçalho para a filmagem para jogar um controlador.

106
00:07:16,530 --> 00:07:21,750
‫Podemos duplicar, perder classe de tela e fazer uma classe de tela de vitória.

107
00:07:21,750 --> 00:07:25,200
‫E aqui também podemos ir em frente e lutar contra isso.

108
00:07:25,200 --> 00:07:26,130
‫Um mini desafio para você.

109
00:07:26,130 --> 00:07:29,490
‫Talvez vá em frente e configure-o para que ele possa fazer uma tela de vitória.

110
00:07:30,000 --> 00:07:30,630
‫Kay, bem-vindo de volta.

111
00:07:30,630 --> 00:07:33,120
‫Então, espero que você tenha dado uma chance a isso.

112
00:07:33,120 --> 00:07:40,290
‫Nós vamos simplesmente colocar o pára-brisas aqui em vez de todos os anúncios perdidos, essencialmente todo

113
00:07:40,290 --> 00:07:41,280
‫o resto.

114
00:07:42,870 --> 00:07:43,500
‫Igual a.

115
00:07:44,830 --> 00:07:51,760
‫Vamos em frente e compilar isso, então vamos para o editor e encontraremos a classe do

116
00:07:51,820 --> 00:07:53,610
‫controlador do jogador.

117
00:07:53,620 --> 00:07:56,680
‫E agora devemos ver que há uma classe de pára-brisas vazia.

118
00:07:57,010 --> 00:08:02,290
‫E o que vamos fazer é ir para a interface do usuário e vou duplicar a tela perdida para

119
00:08:02,350 --> 00:08:03,430
‫chamar o pára-brisa.

120
00:08:03,670 --> 00:08:05,800
‫E você pode criar o seu do zero, se quiser.

121
00:08:05,800 --> 00:08:11,740
‫Mas vou usá-lo de maneira muito semelhante, exceto que vou mudar a cor para verde.

122
00:08:12,680 --> 00:08:16,880
‫E transformá-lo em um você ganha em vez de um você perde.

123
00:08:18,090 --> 00:08:21,770
‫Porque a lógica de reinicialização será efetivamente a mesma.

124
00:08:21,840 --> 00:08:25,590
‫Algum motivo ele redefiniu minha cor que eu vou definir a tela colorida novamente.

125
00:08:25,620 --> 00:08:26,430
‫Ok, então isso é ótimo.

126
00:08:26,430 --> 00:08:31,680
‫Mas ainda temos esse pedaço de pseudocódigo no modo de jogo KML que não foi preenchido.

127
00:08:31,710 --> 00:08:34,590
‫E isso porque é seu desafio calcular a vitória.

128
00:08:34,980 --> 00:08:40,470
‫Preencha o pseudocódigo, use o intervalo ativo T abaixo nessa classe para ajudá-lo.

129
00:08:40,830 --> 00:08:45,360
‫Use o novo é aquela função que criamos no controlador e teste-o.

130
00:08:45,360 --> 00:08:49,410
‫Veja se o seu pára-brisas aparece quando você mata todo o ar do mundo.

131
00:08:49,500 --> 00:08:53,370
‫Então vou deixar com o pseudocódigo na tela para você dar uma olhada.

132
00:08:54,030 --> 00:08:54,970
‫K Bem-vindo de volta.

133
00:08:54,990 --> 00:08:56,220
‫Então vamos começar com o loop for.

134
00:08:56,760 --> 00:08:59,020
‫Então eu vou fazer um para o que fazemos para fazer um loop?

135
00:08:59,040 --> 00:09:00,600
‫Não é um controlador desta vez.

136
00:09:00,600 --> 00:09:03,630
‫Vai ser o controlador aéreo do atirador.

137
00:09:03,630 --> 00:09:05,160
‫Então, precisamos incluir isso em hash.

138
00:09:06,120 --> 00:09:09,300
‫Vai ser o atirador.

139
00:09:10,250 --> 00:09:12,040
‫Controlador aéreo Don H.

140
00:09:13,110 --> 00:09:20,520
‫E isso significa que vamos fazer um loop em uma loja de controladores do Shooter II

141
00:09:20,520 --> 00:09:30,060
‫para apenas esfriar o controlador, os shorts, e então vamos fazer um intervalo de ator novamente que um controlador aéreo de atirador.

142
00:09:30,060 --> 00:09:33,810
‫Precisamos obter esses dois tipos para corresponder, em seguida, obter o mundo.

143
00:09:34,290 --> 00:09:36,290
‫Então, estamos fazendo isso neste nível.

144
00:09:37,800 --> 00:09:42,450
‫E então temos o corpo do loop completo aqui onde vamos perguntar se não está morto.

145
00:09:42,480 --> 00:09:47,820
‫Então, se não, o Controlador Arrow está morto.

146
00:09:49,660 --> 00:09:52,240
‫Basicamente dizendo para se certificar de que não estamos mortos.

147
00:09:52,720 --> 00:09:58,300
‫E se não estiver morto, então vamos em frente e voltamos a esse retorno antecipado porque sabemos que o

148
00:09:58,300 --> 00:09:59,860
‫jogo ainda não pode terminar.

149
00:10:00,310 --> 00:10:05,860
‫Caso contrário, se passamos por todo o loop sem retornar, precisamos terminar o jogo porque

150
00:10:05,980 --> 00:10:10,090
‫o jogador deve ter vencido, matado toda a IA no nível.

151
00:10:10,600 --> 00:10:13,000
‫Então, neste caso, poderíamos fazer um jogo final.

152
00:10:13,250 --> 00:10:13,830
‫Verdadeiro.

153
00:10:13,870 --> 00:10:15,060
‫Porque o jogador tem um.

154
00:10:15,430 --> 00:10:20,170
‫E isso deve notificar todos os controladores de jogadores e controladores aéreos ao redor.

155
00:10:20,860 --> 00:10:21,370
‫Frio.

156
00:10:21,430 --> 00:10:24,760
‫Então, vamos compilar isso, em primeiro lugar.

157
00:10:24,940 --> 00:10:27,760
‫Então eu vou para Unreal e tenho uma peça.

158
00:10:27,790 --> 00:10:32,350
‫Por alguma razão, meu editor pensa que estou nesta operação de edição de cores especificada, então

159
00:10:32,350 --> 00:10:33,820
‫vou fechá-la e reiniciá-la.

160
00:10:33,970 --> 00:10:38,610
‫Agora que está com boot gratuito, vou em frente e aperte o play e vou ser morto.

161
00:10:38,620 --> 00:10:40,400
‫Em primeiro lugar, sim, eu ainda perco.

162
00:10:40,420 --> 00:10:41,080
‫Isso é ótimo.

163
00:10:41,090 --> 00:10:43,780
‫Agora vamos ver se consigo matar esse cara antes que ele me mate.

164
00:10:44,670 --> 00:10:45,210
‫Vamos lá.

165
00:10:45,210 --> 00:10:46,860
‫Bum, bum, bum, bum, bum, bum, bum.

166
00:10:47,220 --> 00:10:48,110
‫Eu perco muito rápido.

167
00:10:48,120 --> 00:10:52,120
‫Vamos encontrar a arma novamente e pronto.

168
00:10:52,140 --> 00:10:55,260
‫Temos esse dano da arma muito alto.

169
00:10:55,290 --> 00:11:00,450
‫Para fins de teste, vou definir o dano de volta para talvez 20 desta vez.

170
00:11:00,840 --> 00:11:02,940
‫Então ainda é rápido, mas não tão rápido.

171
00:11:03,360 --> 00:11:06,240
‫Vá e jogue e acerte esse cara algumas vezes.

172
00:11:06,450 --> 00:11:12,160
‫E o que vimos foi que na verdade eu ganhei porque o nível recomeçou.

173
00:11:12,180 --> 00:11:15,630
‫Então, se eu for matar esse cara de novo, você verá que nada está acontecendo.

174
00:11:15,630 --> 00:11:19,830
‫Está dizendo no log de mensagens o que foi chamado com uma classe nula.

175
00:11:19,830 --> 00:11:25,830
‫E a razão para isso, se formos para um controlador de jogador de atirador da BP, novamente, você pode ver que

176
00:11:25,830 --> 00:11:27,300
‫não conectamos nosso pára-brisa.

177
00:11:27,360 --> 00:11:31,290
‫Uma coisa que esqueci de fazer para poder compilar, salvar e jogar.

178
00:11:31,290 --> 00:11:37,740
‫E agora espero que se eu matar esse cara para uma nova desgraça, eu ganhe e vou reiniciar em 5 segundos.

179
00:11:38,100 --> 00:11:40,860
‫E eu quero te mostrar que o mesmo é verdade.

180
00:11:41,070 --> 00:11:46,080
‫Se eu colocar mais controladores de jogadores no mundo, vai exigir que eu mate os dois.

181
00:11:46,410 --> 00:11:49,890
‫Então vamos trazer o personagem atirador aqui.

182
00:11:50,670 --> 00:11:52,890
‫E este vai ser o meu segundo inimigo a matar.

183
00:11:52,890 --> 00:11:53,760
‫Então mate esse cara.

184
00:11:53,790 --> 00:11:54,210
‫Estrondo.

185
00:11:55,410 --> 00:11:56,640
‫E não ganhou.

186
00:11:56,880 --> 00:11:58,440
‫Então eu vou até o segundo cara.

187
00:11:58,710 --> 00:11:59,050
‫Estrondo.

188
00:11:59,400 --> 00:12:00,570
‫E agora eu tenho um.

189
00:12:00,570 --> 00:12:05,010
‫Porque eu matei todos os alfas, e não tivemos que mudar nenhuma variável para fazer isso.

190
00:12:05,010 --> 00:12:09,360
‫Porque eu for loop conta todos os vivos todas as vezes do zero.

191
00:12:09,420 --> 00:12:12,230
‫Então, atualmente estamos vivendo em um mundo bastante silencioso.

192
00:12:12,240 --> 00:12:18,210
‫Então, na próxima palestra, quero começar a analisar um pouco como podemos fazer um pouco de áudio.

193
00:12:18,300 --> 00:12:19,020
‫Eu te vejo lá.

