﻿1
00:00:04,490 --> 00:00:10,940
‫Nesta palestra, vamos montar um controlador de jogador que receberá informações de que o jogo

2
00:00:10,940 --> 00:00:18,110
‫terminou do modo de jogo e criará esse comportamento de reinicialização que após 5 segundos recarrega o

3
00:00:18,110 --> 00:00:20,870
‫nível após a morte do jogador.

4
00:00:21,080 --> 00:00:22,520
‫Vamos mergulhar e ver como é feito.

5
00:00:23,450 --> 00:00:30,950
‫Então, quando o jogo realmente terminar, precisamos notificar o controlador do jogador e também precisamos ter um controlador do jogador

6
00:00:30,950 --> 00:00:37,340
‫em nosso C++ para que possamos implementar o comportamento de nos permitir reiniciar o nível e

7
00:00:37,340 --> 00:00:37,760
‫tal.

8
00:00:38,300 --> 00:00:44,180
‫Então, a primeira coisa a fazer é quando este ponto é morto, antes de tudo, estamos apenas registrando indiscriminadamente.

9
00:00:44,420 --> 00:00:48,140
‫Queremos verificar se o jogo acabou ou não.

10
00:00:48,170 --> 00:00:50,330
‫Agora, há dois cenários.

11
00:00:50,330 --> 00:00:52,520
‫Um é onde ganhamos e outro é onde perdemos.

12
00:00:52,850 --> 00:00:55,550
‫A derrota é a primeira que vou enfrentar porque é mais fácil.

13
00:00:55,550 --> 00:00:58,190
‫Se o peão morto é o jogador que você perde, é isso.

14
00:00:58,190 --> 00:01:04,100
‫Você pode optar por ter várias vidas com diferentes iterações deste modo de jogo, mas não vou fazer

15
00:01:04,100 --> 00:01:04,790
‫isso.

16
00:01:04,790 --> 00:01:06,170
‫Só vou ter uma vida de solteiro.

17
00:01:06,170 --> 00:01:07,460
‫Se você morrer, game over.

18
00:01:07,460 --> 00:01:08,630
‫Você pode querer reiniciar.

19
00:01:09,380 --> 00:01:13,490
‫Então, como verificamos se esse peão é um controlador de jogador?

20
00:01:13,700 --> 00:01:14,930
‫Bem, isso é bem direto.

21
00:01:14,930 --> 00:01:22,490
‫Podemos apenas fazer um elenco para que possamos fazer um elenco para um controlador de jogador e para o peão morto.

22
00:01:22,760 --> 00:01:25,310
‫E então se isso não for nulo.

23
00:01:25,310 --> 00:01:26,810
‫Então vamos pegar o ponteiro.

24
00:01:26,810 --> 00:01:34,250
‫Um ponteiro de controle de player para cima o chama de controlador de player e armazena o resultado desse ponteiro aqui.

25
00:01:34,550 --> 00:01:38,450
‫E vamos dizer basicamente se isso não é não.

26
00:01:38,930 --> 00:01:46,010
‫Então, se o controlador do jogador não é um ponteiro nulo, então sabemos que é o jogador que morreu e que o jogo

27
00:01:46,010 --> 00:01:47,330
‫acabou para o jogador.

28
00:01:47,810 --> 00:01:52,040
‫Então, o que queremos fazer é chamar esse método do controlador do jogador.

29
00:01:52,040 --> 00:01:57,440
‫Já sugerimos o fato de que existe um método de jogo terminado.

30
00:01:57,470 --> 00:01:58,400
‫Vamos dar uma olhada nisso.

31
00:01:58,400 --> 00:02:06,950
‫Se fizermos um controle P e dermos uma olhada no controlador do jogador ponto h e pudermos procurar se um jogo terminou.

32
00:02:07,660 --> 00:02:13,340
‫Você pode ver com certeza que existe um método virtual aqui chamado jogo terminou e você pode ver que há um

33
00:02:13,340 --> 00:02:14,750
‫foco no final do jogo.

34
00:02:14,750 --> 00:02:16,640
‫Em qual ator devemos focar no final?

35
00:02:16,640 --> 00:02:19,760
‫Jogo por padrão, são pontos nulos e provavelmente é isso que vou usar.

36
00:02:20,810 --> 00:02:22,850
‫E então vamos dizer, este é o vencedor?

37
00:02:22,880 --> 00:02:28,070
‫Basicamente, você tem que deixar o jogador controlar e saber se ele ganhou ou não.

38
00:02:28,430 --> 00:02:31,730
‫E isso é bastante simples, digamos, neste caso.

39
00:02:31,730 --> 00:02:32,810
‫Não, eles não têm.

40
00:02:33,290 --> 00:02:41,420
‫Então nós vamos fazer um jogo de controle de seta terminou, então eu vou colocar ponteiro nulo para o foco do

41
00:02:41,420 --> 00:02:47,480
‫jogo final porque nós realmente não precisamos desse recurso e então é o vencedor.

42
00:02:47,480 --> 00:02:49,190
‫Simplesmente vai ser falso.

43
00:02:49,400 --> 00:02:53,330
‫Este não é o controlador do jogador vencedor porque é o que acabou de morrer.

44
00:02:54,310 --> 00:02:56,890
‫Então é hora de um pequeno desafio para você implementar.

45
00:02:56,890 --> 00:02:59,470
‫O jogo terminou em um controlador de jogo.

46
00:02:59,800 --> 00:03:06,880
‫Isso significa que precisamos criar um controlador de jogador C++, criar sua subclasse de blueprint, gerar essa subclasse de blueprint

47
00:03:06,880 --> 00:03:12,460
‫por padrão em nosso modo de jogo e então você deseja prosseguir e substituir.

48
00:03:12,490 --> 00:03:17,320
‫O jogo terminou e coloquei uma mensagem de log lá para verificar se realmente estamos conseguindo.

49
00:03:17,320 --> 00:03:19,600
‫Esse jogo acabou na hora certa.

50
00:03:19,990 --> 00:03:20,980
‫Faça uma pausa, grave o vídeo e experimente.

51
00:03:21,260 --> 00:03:21,540
‫OK.

52
00:03:21,550 --> 00:03:22,060
‫Bem vindo de volta.

53
00:03:22,360 --> 00:03:27,550
‫Então, passo um, crie esse controlador de player C++, crie uma nova classe C++.

54
00:03:27,700 --> 00:03:30,700
‫Então vá e procure vamos ver, controlador de jogador.

55
00:03:30,730 --> 00:03:34,690
‫Em seguida, vamos chamá-lo de controlador do jogador de tiro.

56
00:03:34,720 --> 00:03:35,860
‫Vá em frente e crie essa classe.

57
00:03:35,980 --> 00:03:44,510
‫Feito isso, queremos ir para nossos blueprints e criar uma classe de blueprint baseada nele.

58
00:03:44,530 --> 00:03:50,410
‫Então, queremos o controlador de jogador de tiro como base assim e vamos chamá-lo de BP, controlador

59
00:03:50,830 --> 00:03:53,050
‫de jogador de tiro de sublinhado.

60
00:03:53,170 --> 00:03:57,520
‫No momento, isso não é realmente necessário, mas mais tarde, vamos querer conectar alguns recursos de interface

61
00:03:57,520 --> 00:03:59,170
‫do usuário ao controlador do player.

62
00:03:59,170 --> 00:04:00,700
‫Então nós vamos tê-lo lá pronto.

63
00:04:01,240 --> 00:04:07,840
‫Em seguida, vamos para o modo de jogo BP KML e encaixamos isso porque queremos alterar a classe de controlador de jogador

64
00:04:07,840 --> 00:04:12,970
‫padrão do controlador de jogador para nosso BPM, o controlador de jogador de atirador da escola.

65
00:04:13,420 --> 00:04:13,810
‫Frio.

66
00:04:14,440 --> 00:04:16,330
‫Então queremos substituir.

67
00:04:16,330 --> 00:04:17,980
‫Nosso jogo acabou.

68
00:04:18,610 --> 00:04:21,990
‫Então vamos ver se vamos para o controle do jogador para h.

69
00:04:22,000 --> 00:04:24,310
‫Podemos ver que isso está na seção pública.

70
00:04:24,520 --> 00:04:25,300
‫Aqui está a assinatura.

71
00:04:25,300 --> 00:04:25,930
‫Vamos copiá-lo.

72
00:04:25,930 --> 00:04:31,090
‫Vá para o ponto de controle do jogo de tiro e crie público.

73
00:04:32,110 --> 00:04:35,590
‫Para esse jogo vazio virtual terminou.

74
00:04:35,620 --> 00:04:39,970
‫Legal e já temos que substituir porque isso estava claramente sendo substituído de algum lugar para.

75
00:04:41,190 --> 00:04:45,300
‫E então o que podemos fazer é ir em frente e implementá-lo.

76
00:04:45,330 --> 00:04:48,480
‫Mudança de controle p, queremos chamá-lo de super-lembrete.

77
00:04:49,820 --> 00:04:52,820
‫E queremos fazer jogo terminou assim.

78
00:04:53,870 --> 00:05:01,640
‫E queremos passar no foco final do jogo e o B é o vencedor e então queremos logar.

79
00:05:01,790 --> 00:05:02,480
‫Então você loga.

80
00:05:02,930 --> 00:05:04,040
‫Ele é meu macro lá.

81
00:05:04,700 --> 00:05:07,100
‫Terminamos.

82
00:05:07,190 --> 00:05:10,100
‫Vai ser a mensagem de log saindo no final.

83
00:05:10,310 --> 00:05:12,620
‫Então, vamos compilar e ver se isso está funcionando.

84
00:05:12,870 --> 00:05:14,240
‫Eu vou para o log de saída.

85
00:05:14,690 --> 00:05:15,290
‫Aperte o play.

86
00:05:15,500 --> 00:05:18,350
‫Vá e seja morto, basicamente.

87
00:05:18,410 --> 00:05:19,920
‫A saúde está indo devagar.

88
00:05:20,660 --> 00:05:23,420
‫E então devemos ver uma mensagem.

89
00:05:23,450 --> 00:05:24,440
‫Estamos recebendo a mensagem?

90
00:05:24,470 --> 00:05:24,890
‫Não.

91
00:05:24,920 --> 00:05:25,850
‫Então vamos dar uma olhada.

92
00:05:25,850 --> 00:05:27,170
‫Qual é o controlador do player aqui?

93
00:05:27,200 --> 00:05:32,600
‫O controlador do jogador de tiro BP sublinhado parece ser o correto.

94
00:05:32,930 --> 00:05:35,270
‫O jogo de substituição terminou.

95
00:05:35,570 --> 00:05:37,190
‫Agora, aqui, eu localizo um bug.

96
00:05:37,220 --> 00:05:41,120
‫Agora, isso é algo que alguns de vocês devem ter notado e gritado

97
00:05:41,630 --> 00:05:47,690
‫na tela é que aqui temos nosso controle de jogador para o qual estamos lançando e estou ficando confuso com

98
00:05:47,690 --> 00:05:49,450
‫o peão real do jogador.

99
00:05:49,910 --> 00:05:57,220
‫Então, o que queremos fazer aqui é pegar o controlador do peão que foi morto.

100
00:05:57,230 --> 00:06:01,220
‫Então peão morto dot get erro do controlador.

101
00:06:01,310 --> 00:06:06,040
‫Então, a seta obtém o controlador e queremos transmitir isso para o controlador do jogador.

102
00:06:06,080 --> 00:06:08,530
‫E se isso for nulo, tudo bem, isso deve funcionar.

103
00:06:08,540 --> 00:06:10,670
‫Então vamos em frente e tentar isso.

104
00:06:10,760 --> 00:06:12,050
‫Vá em frente e aperte o play.

105
00:06:12,780 --> 00:06:13,760
‫Castle está morto de novo.

106
00:06:15,610 --> 00:06:18,730
‫E desta vez também não recebemos nenhuma mensagem.

107
00:06:19,000 --> 00:06:21,100
‫E desta vez, é por uma razão sutil.

108
00:06:21,550 --> 00:06:24,250
‫Isso é porque estamos desconectando do controlador.

109
00:06:24,760 --> 00:06:26,860
‫Antes de chamar isso de -- morto.

110
00:06:26,860 --> 00:06:32,560
‫Então, quando ele tenta pegar o peão controlador, isso é realmente não, não há mais peão controlador.

111
00:06:32,830 --> 00:06:38,200
‫Portanto, precisamos fazer essa notificação antes de fazer a desconexão do controlador.

112
00:06:38,590 --> 00:06:42,190
‫I inclui subir a linha que se apodera do nosso modo de jogo.

113
00:06:42,190 --> 00:06:46,960
‫Eu não acho que isso importaria, mas agora que eu realmente penso sobre isso, sim, claro que importa.

114
00:06:47,290 --> 00:06:49,930
‫Então vamos para o nosso nível e jogar.

115
00:06:50,500 --> 00:06:51,640
‫Vamos levar um tiro.

116
00:06:52,060 --> 00:06:56,860
‫E uma vez feito isso, você pode ver que terminamos de imprimir como queremos.

117
00:06:56,890 --> 00:06:58,960
‫Então, tivemos alguns contratempos ao longo do caminho.

118
00:06:58,960 --> 00:07:01,390
‫Não é sua culpa se você não conseguiu isso no desafio.

119
00:07:01,750 --> 00:07:03,690
‫Você fez todo o resto até aquele ponto.

120
00:07:03,700 --> 00:07:04,690
‫Isso é ótimo.

121
00:07:05,110 --> 00:07:10,780
‫Então, espero que você tenha tentado depurar isso, mas não se preocupe se você ficou preso nessas coisas.

122
00:07:11,350 --> 00:07:17,650
‫A última coisa que eu queria fazer aqui é realmente reiniciar o jogo em um cronômetro.

123
00:07:18,100 --> 00:07:25,210
‫Agora, a maneira como podemos fazer isso é bastante direta, porque o controlador do player realmente possui um método de

124
00:07:25,450 --> 00:07:25,900
‫reinicialização.

125
00:07:25,900 --> 00:07:30,160
‫Então, se formos dar uma olhada nisso, deve ser um nível de reinicialização.

126
00:07:30,160 --> 00:07:35,560
‫Esse é o que queremos chamar e queremos fazer isso em um temporizador.

127
00:07:35,560 --> 00:07:42,460
‫Então, usamos temporizadores antes para repetir coisas, mas também podemos usá-lo apenas para atrasar uma ação em

128
00:07:42,460 --> 00:07:43,720
‫uma certa quantidade.

129
00:07:44,200 --> 00:07:49,930
‫Então eu vou para o jogador de tiro, controlador, ponto H e criar uma propriedade privada aqui.

130
00:07:50,890 --> 00:07:56,500
‫Privado pode ser sua propriedade que é editada em qualquer lugar.

131
00:07:58,590 --> 00:07:59,100
‫Flutuador.

132
00:07:59,100 --> 00:08:02,540
‫Esse será o atraso de reinicialização.

133
00:08:03,080 --> 00:08:05,460
‫Você pode ver por que já precisamos de uma base de projeto para isso.

134
00:08:05,850 --> 00:08:08,160
‫Vou dar um atraso de 5/2.

135
00:08:08,670 --> 00:08:16,680
‫Então eu vou passar para o C++ e vamos querer fazer um get timer bem, timer manager.

136
00:08:17,610 --> 00:08:19,620
‫E então podemos fazer isso.

137
00:08:19,890 --> 00:08:21,840
‫Então precisamos incluir.

138
00:08:21,870 --> 00:08:27,690
‫Então hash include e será o gerenciador de timer dot H.

139
00:08:28,410 --> 00:08:33,180
‫Então devemos ser capazes de usar o operador ponto porque o tipo de retorno aqui é uma

140
00:08:33,180 --> 00:08:35,250
‫referência e vamos fazer um cronômetro definido.

141
00:08:35,340 --> 00:08:38,130
‫E aqui precisamos passar um identificador de timer.

142
00:08:38,130 --> 00:08:40,740
‫Então, na seção privada, vamos criar um conjunto.

143
00:08:40,740 --> 00:08:42,810
‫Poderia ser um identificador de timer f.

144
00:08:42,930 --> 00:08:46,410
‫Vou chamá-lo de temporizador de reinicialização como.

145
00:08:46,410 --> 00:08:51,060
‫Então, esse será o identificador que passaremos para o nosso timer definido.

146
00:08:51,270 --> 00:08:57,780
‫A próxima coisa que precisamos na quinta assinatura aqui é ter o objeto que queremos chamar, que será

147
00:08:57,780 --> 00:08:58,830
‫apenas isso.

148
00:08:59,550 --> 00:09:04,950
‫E então haverá acho que deve ser apenas o método em si.

149
00:09:05,610 --> 00:09:08,250
‫Então, podemos fazer isso fazendo e comercial.

150
00:09:08,250 --> 00:09:13,890
‫E então é na verdade o método, o método de nível de reinicialização, que queremos chamar que foi

151
00:09:13,890 --> 00:09:16,140
‫definido no controlador de jogador A.

152
00:09:16,140 --> 00:09:17,640
‫Portanto, um controlador de jogador.

153
00:09:19,270 --> 00:09:21,190
‫Dois pontos, nível de reinicialização de dois pontos.

154
00:09:21,700 --> 00:09:27,970
‫E então só precisamos passar o atraso que já definimos como o atraso de reinicialização.

155
00:09:28,690 --> 00:09:35,740
‫Então faça isso, mas um ponto e vírgula no final e esperamos que possamos reiniciar após 5

156
00:09:35,740 --> 00:09:36,520
‫segundos.

157
00:09:36,920 --> 00:09:41,590
‫Agora vamos tornar o teste um pouco mais fácil abrindo nosso rifle e tornando-o um pouco

158
00:09:41,590 --> 00:09:42,490
‫mais letal.

159
00:09:42,490 --> 00:09:46,180
‫Então eu vou para os padrões, fazer o dano em 50.

160
00:09:46,180 --> 00:09:47,890
‫Então seja morto com dois tiros.

161
00:09:48,310 --> 00:09:49,630
‫Vamos e aperte o play.

162
00:09:50,660 --> 00:09:52,010
‫Sejamos mortos rapidamente.

163
00:09:53,290 --> 00:10:00,400
‫E depois de 5 segundos, esperamos que devamos reiniciar o nível que reiniciamos e voltamos ao nível.

164
00:10:00,410 --> 00:10:02,830
‫Portanto, nosso cronômetro está funcionando como esperamos.

165
00:10:03,730 --> 00:10:11,350
‫Agora, em versões posteriores, você descobrirá que, em vez de reiniciar, o que você verá é uma mensagem de erro que se parece com

166
00:10:11,350 --> 00:10:16,980
‫isso e fala sobre falha de viagem e diz algo sobre você ler caixa de areia morna,

167
00:10:17,140 --> 00:10:18,370
‫blá blá blá.

168
00:10:18,700 --> 00:10:23,620
‫Bem, a maneira que temos de contornar isso quando estamos tentando reiniciar e queremos verificar

169
00:10:23,620 --> 00:10:29,800
‫se nossa reinicialização está funcionando, é ir ao nosso menu ponto, ponto, ponto em vez do menu play e temos

170
00:10:29,800 --> 00:10:31,840
‫que jogar como um jogo autônomo.

171
00:10:31,870 --> 00:10:38,290
‫Se você jogar um jogo autônomo, demora um pouco mais para iniciar, mas a

172
00:10:38,290 --> 00:10:43,390
‫reinicialização funcionará conforme o esperado e vemos o nível recarregado.

173
00:10:43,630 --> 00:10:46,510
‫Agora, obviamente, não há muita indicação de que isso vai acontecer.

174
00:10:46,510 --> 00:10:50,100
‫Então, vamos olhar para a interface do usuário nas próximas aulas.

175
00:10:50,110 --> 00:10:50,770
‫Eu te vejo lá.

