﻿1
00:00:04,420 --> 00:00:06,220
‫Olá e bem-vindo de volta.

2
00:00:06,250 --> 00:00:13,210
‫Agora, já criamos a capacidade de lidar com a morte para o tanque e a torre, e vimos que isso

3
00:00:13,210 --> 00:00:20,200
‫envolvia algumas etapas extras com nosso tanque, pois acessamos o controlador do jogador para desabilitar a entrada e desabilitar a

4
00:00:20,200 --> 00:00:22,120
‫exibição do cursor do mouse.

5
00:00:22,150 --> 00:00:28,270
‫Agora gostaríamos de ter nossa própria classe de controlador de player personalizada para que possamos adicionar funcionalidades a ela que

6
00:00:28,300 --> 00:00:30,210
‫lidarão com isso para nós.

7
00:00:30,220 --> 00:00:36,010
‫E então gostaríamos de criar um blueprint baseado nesta classe para que possamos acessar algumas das

8
00:00:36,010 --> 00:00:42,580
‫variáveis expostas no controlador do player, como qual cursor do mouse mostrar quando começarmos a mostrar o cursor

9
00:00:42,580 --> 00:00:43,630
‫do mouse.

10
00:00:43,660 --> 00:00:50,020
‫Então, vamos criar uma classe de controlador de jogador e adicionar a funcionalidade de entrada de ativação e desativação.

11
00:00:50,020 --> 00:00:54,490
‫E então vamos criar um blueprint e definir o tipo de cursor do mouse em blueprints.

12
00:00:54,520 --> 00:00:58,030
‫Agora, criar essa classe é algo que você sabe fazer.

13
00:00:58,030 --> 00:01:04,480
‫Então você vai criar uma classe player controller para seu desafio, criar uma nova classe C++ e

14
00:01:04,480 --> 00:01:07,300
‫escolher player controller como a classe pai.

15
00:01:07,300 --> 00:01:11,800
‫Chame isso de tanques de sintonia, controlador de jogador ou algo apropriado assim.

16
00:01:11,800 --> 00:01:15,760
‫E quando terminar, crie um blueprint com base nessa classe.

17
00:01:15,760 --> 00:01:21,340
‫Agora, uma vez que você tenha o blueprint, você pode atribuí-lo como o controlador de jogador padrão no blueprint do

18
00:01:21,340 --> 00:01:22,330
‫modo de jogo.

19
00:01:22,360 --> 00:01:25,180
‫Faça isso no modo de jogo, blueprint em si.

20
00:01:25,360 --> 00:01:30,280
‫Pause o vídeo e crie a classe do controlador do player para o tanque agora.

21
00:01:33,230 --> 00:01:33,680
‫OK.

22
00:01:33,680 --> 00:01:34,790
‫Então estou de volta ao editor.

23
00:01:34,790 --> 00:01:41,210
‫Vou clicar com o botão direito do mouse em nova classe C++ e rolar para baixo e verei que o controlador do player é

24
00:01:41,210 --> 00:01:42,170
‫uma opção aqui.

25
00:01:42,170 --> 00:01:48,320
‫Então, eu vou selecionar o controle do jogador e nomear meus novos tanques de sintonia do controle do jogador.

26
00:01:49,110 --> 00:01:53,190
‫Jogador, controlador e clique em criar classe.

27
00:01:53,190 --> 00:01:56,790
‫E aqui eu tenho minha nova classe de controle de jogador.

28
00:01:56,820 --> 00:02:00,030
‫Agora, o próximo passo é criar um blueprint com base nisso.

29
00:02:00,030 --> 00:02:06,060
‫Então, estou de volta ao editor e não disse para você fazer isso, mas vou criar uma nova pasta

30
00:02:06,060 --> 00:02:09,360
‫aqui na minha pasta de blueprints chamada Player Controller.

31
00:02:10,440 --> 00:02:15,480
‫E se você quiser a mesma estrutura de pastas, você pode criar essa pasta agora, se ainda não tiver

32
00:02:15,480 --> 00:02:19,170
‫feito isso, e depois mover o blueprint do controlador do player para ela.

33
00:02:19,170 --> 00:02:23,610
‫Se você não sabe como mover um blueprint de uma pasta para outra, é bem simples.

34
00:02:23,640 --> 00:02:30,810
‫Você vai para a pasta que contém o blueprint, clica e arrasta para a pasta correta e clica em

35
00:02:30,810 --> 00:02:31,740
‫mover aqui.

36
00:02:31,890 --> 00:02:36,900
‫Agora, não quero mover meu projétil para esta pasta, então vou clicar aqui no navegador de

37
00:02:36,900 --> 00:02:38,760
‫conteúdo para cancelar essa ação.

38
00:02:38,760 --> 00:02:41,370
‫Então agora eu tenho uma pasta do controlador do jogador.

39
00:02:41,370 --> 00:02:47,760
‫Vou clicar com o botão direito do mouse e clicar em Blueprint Class e nessa busca vou procurar por Toon

40
00:02:47,760 --> 00:02:51,460
‫Tanks, Player Controller e selecionar essa classe e clicar em Select.

41
00:02:51,480 --> 00:02:57,180
‫Agora eu posso chamar esse sinal sonoro de controlador de jogador de tanques de toon.

42
00:02:57,390 --> 00:02:59,070
‫Então agora eu tenho um controlador de jogador.

43
00:02:59,070 --> 00:03:02,100
‫Agora eu preciso definir isso como o controlador de jogador padrão.

44
00:03:02,100 --> 00:03:08,220
‫Então eu vou para a pasta do modo de jogo, abrir beep, sintonizar tanques, modo de jogo e abrir o blueprint completo.

45
00:03:08,220 --> 00:03:11,670
‫Editor E aqui eu vejo a classe do controlador do jogador.

46
00:03:11,940 --> 00:03:18,690
‫Vou clicar no menu suspenso e selecionar tanques de ajuste de BP, controlador de jogador e compilar, salvar

47
00:03:18,690 --> 00:03:19,950
‫e fechar isso.

48
00:03:19,950 --> 00:03:23,250
‫Então agora temos a classe de controle de jogador personalizado.

49
00:03:23,250 --> 00:03:25,680
‫Estamos prontos para adicionar algumas funcionalidades a isso.

50
00:03:25,680 --> 00:03:31,110
‫Então, o que eu gostaria é de uma função aqui que possa definir o estado ativado do player, se

51
00:03:31,110 --> 00:03:34,890
‫o player está ativado ou não para adicionar entrada que moverá o tanque.

52
00:03:34,890 --> 00:03:39,690
‫Agora eu pretendo chamar isso do modo de jogo quando o ator morrer.

53
00:03:39,690 --> 00:03:44,940
‫Então, vou fazer uma seção pública aqui e a função será anulada.

54
00:03:44,940 --> 00:03:55,020
‫E eu vou simplesmente chamar esse estado de habilitado para o player definido, que pode receber um booleano chamado B player

55
00:03:55,020 --> 00:03:55,950
‫habilitado.

56
00:03:56,550 --> 00:04:01,830
‫Dessa forma, se chamarmos essa função, podemos passar true se quisermos que o player seja ativado

57
00:04:01,830 --> 00:04:04,620
‫ou false se quisermos que ele seja desativado.

58
00:04:04,620 --> 00:04:09,090
‫Então vamos implementar esta função em tanques de sintonia, jogador, controlador.

59
00:04:09,360 --> 00:04:14,100
‫CP Então aqui está minha função e claro que preciso do nome da classe aqui.

60
00:04:14,100 --> 00:04:20,370
‫Então vai ser um tanque de sintonia, jogador, controlador, e há o operador de resolução do osciloscópio.

61
00:04:20,370 --> 00:04:22,860
‫Agora, esta função vai ser bastante simples.

62
00:04:22,860 --> 00:04:28,320
‫Ele vai verificar o valor do jogador B habilitado, e podemos fazer isso com um simples teste de if.

63
00:04:28,320 --> 00:04:35,460
‫Então vou dizer se o jogador B ativou e gostaria de acessar o peão e habilitar ou desabilitar a entrada

64
00:04:35,460 --> 00:04:41,790
‫e a forma de acessar o peão que esse jogador controlador está possuindo é usar a função, obter

65
00:04:41,790 --> 00:04:42,390
‫peão.

66
00:04:42,390 --> 00:04:47,520
‫Isso retorna e um peão e a classe de peões tem a função.

67
00:04:47,520 --> 00:04:55,860
‫Ativar entrada e ativar entrada, como vimos, requer um controlador de jogador para que possamos passar isso.

68
00:04:56,190 --> 00:05:02,490
‫Agora estou recebendo os rabiscos vermelhos porque precisamos incluir esse tipo de classe de peão e podemos ver

69
00:05:02,490 --> 00:05:09,090
‫facilmente a inclusão do peão indo para a documentação do mecanismo irreal de um peão ou podemos simplesmente

70
00:05:09,090 --> 00:05:13,890
‫ir para nossa classe de peão base que herda de um peão.

71
00:05:14,070 --> 00:05:19,890
‫E como ele herda de um peão, vimos que ele precisa incluir o cabeçalho do peão para que eu

72
00:05:19,890 --> 00:05:23,430
‫possa copiar e incluir a estrutura do jogo, um peão barra.

73
00:05:24,150 --> 00:05:26,850
‫Então, de volta ao controlador de jogador de tanques de sintonia.

74
00:05:26,850 --> 00:05:30,900
‫Eu posso colar essa inclusão aqui no topo para me livrar desses rabiscos vermelhos.

75
00:05:30,900 --> 00:05:37,470
‫Portanto, isso cuida do caso em que o jogador B habilitado é verdadeiro, mas também precisamos de um caso LS aqui.

76
00:05:38,160 --> 00:05:45,210
‫No caso LS vamos chamar get peão e há uma função como habilitar entrada que é projetada para

77
00:05:45,210 --> 00:05:50,580
‫desabilitar a entrada e é chamada, como você pode imaginar, desabilitar a entrada.

78
00:05:50,580 --> 00:05:55,020
‫E isso também requer um controlador de jogador para o qual passaremos neste.

79
00:05:55,020 --> 00:06:00,480
‫Agora o controlador do jogador tem que mostrar o cursor do mouse e vamos definir isso também.

80
00:06:00,480 --> 00:06:04,500
‫E gostaríamos de configurá-lo com base em se o player deve ou não ser ativado.

81
00:06:04,500 --> 00:06:10,950
‫Então, qualquer que seja o valor booleano de B player ativado, vamos definir B show mouse cursor para esse valor.

82
00:06:10,950 --> 00:06:18,090
‫Então, vamos dizer que o cursor do mouse B sho é igual ao B player habilitado.

83
00:06:18,360 --> 00:06:20,730
‫Agora ainda não mostramos o cursor do mouse.

84
00:06:20,730 --> 00:06:21,990
‫Nós vamos chegar a essa parte.

85
00:06:21,990 --> 00:06:27,210
‫Na verdade, gostaríamos de ver o cursor do mouse enquanto estamos jogando para sabermos para onde nosso tanque

86
00:06:27,210 --> 00:06:27,960
‫está mirando.

87
00:06:27,960 --> 00:06:29,490
‫Então, vamos chegar a isso em breve.

88
00:06:29,490 --> 00:06:35,490
‫Mas, por enquanto, temos essa boa função no controlador do jogador e gostaríamos de chamar essa função do modo

89
00:06:35,490 --> 00:06:38,550
‫de jogo agora para mostrar o que quero dizer.

90
00:06:38,550 --> 00:06:44,610
‫Estou voltando ao modo de jogo e aqui está a função ator morreu e você verá que estamos desabilitando a entrada

91
00:06:44,610 --> 00:06:47,070
‫e estamos configurando b show mouse cursor aqui.

92
00:06:47,070 --> 00:06:48,450
‫Então, a razão pela qual eu gostaria de ter um.

93
00:06:48,540 --> 00:06:54,420
‫Função no controlador do player para que possamos simplesmente chamar essa função passando um valor booleano.

94
00:06:54,450 --> 00:07:00,600
‫Nesse caso, passaríamos false para que tivéssemos que a função de entrada desabilitada fosse chamada e B para que o cursor

95
00:07:00,600 --> 00:07:02,570
‫do mouse fosse definido como false.

96
00:07:02,580 --> 00:07:08,880
‫Então, podemos simplesmente chamar essa função aqui agora, em vez de chamar tank get player controller, que retorna

97
00:07:08,880 --> 00:07:09,960
‫um player controller.

98
00:07:10,050 --> 00:07:15,590
‫Eu gostaria de ter uma variável de ponteiro que nos permitisse acessar esse controlador de jogador.

99
00:07:15,600 --> 00:07:20,560
‫Então aqui nos modos de jogo de tanques de sintonia, vou adicionar uma variável privada.

100
00:07:20,580 --> 00:07:27,990
‫Vou declará-lo e será do tipo A, tanques de sintonia, player, controlador, isso é um

101
00:07:27,990 --> 00:07:28,800
‫ponteiro.

102
00:07:28,800 --> 00:07:35,640
‫E vou chamar essa música de Tank's Player Controller e posso definir isso aqui no modo de jogo de tanques

103
00:07:35,640 --> 00:07:39,500
‫de sintonia e começar a jogar usando a estática do jogo.

104
00:07:39,510 --> 00:07:45,360
‫Agora, se você está se perguntando se a estática do jogo tinha uma função de controle de jogador, você estava certo.

105
00:07:45,570 --> 00:07:51,630
‫Esta é uma daquelas funções estáticas úteis que requer um objeto de contexto mundial e um índice

106
00:07:51,630 --> 00:07:58,020
‫de jogador para que possamos copiar o include para a estática do jogo e chamá-la aqui em Begin Play.

107
00:07:58,020 --> 00:08:02,970
‫Então eu vejo no topo aqui, eu já tenho estática de jogabilidade, é porque já estamos usando aqui e

108
00:08:02,970 --> 00:08:05,310
‫começamos a jogar para chamar get player --.

109
00:08:05,310 --> 00:08:09,350
‫Faremos a mesma coisa aqui para definir o ponteiro do controlador do player.

110
00:08:09,360 --> 00:08:11,400
‫Agora, isso é algo que você deve saber como fazer.

111
00:08:11,400 --> 00:08:16,680
‫Então, por que você não pausa o vídeo e faz um pequeno minidesafio aqui e apenas define o valor dos tanques

112
00:08:16,680 --> 00:08:18,060
‫de sintonia, controlador do player.

113
00:08:20,990 --> 00:08:21,470
‫OK.

114
00:08:21,470 --> 00:08:28,760
‫Então, vamos dizer tune tanks, player, controller, e vamos defini-lo igual ao resultado de suas estáticas de

115
00:08:28,760 --> 00:08:37,550
‫jogo, pegue o player controller e sabemos que o objeto de contexto do mundo pode ser isso e o índice do jogador

116
00:08:37,550 --> 00:08:40,160
‫não é nove, mas zero .

117
00:08:40,160 --> 00:08:45,920
‫E é claro que sabemos que isso retorna um controlador de jogador e não um controlador de jogador de tanques de sintonia.

118
00:08:45,920 --> 00:08:49,460
‫Assim como fizemos com Tank aqui, vamos lançar.

119
00:08:49,460 --> 00:08:58,970
‫Então, eu vou dizer cast para um controlador de jogador de tanques de sintonia e estamos lançando o resultado de obter o controlador de

120
00:08:58,970 --> 00:08:59,720
‫jogador.

121
00:08:59,930 --> 00:09:05,270
‫Então agora após Begin Play, teremos os tanques de sintonia, controle do jogador.

122
00:09:05,270 --> 00:09:11,870
‫E agora podemos chegar aqui e, em vez de obter o controlador do jogador usando o controlador do

123
00:09:11,870 --> 00:09:19,430
‫jogador diretamente do tanque, podemos verificar se nosso controlador de jogador de tanques de ajuste variável é válido e, em seguida,

124
00:09:19,430 --> 00:09:21,830
‫podemos chamar essa função que criamos.

125
00:09:21,830 --> 00:09:23,090
‫Vamos voltar e olhar para ele.

126
00:09:23,090 --> 00:09:30,620
‫É chamado de estado de ativação do jogador definido e aqui no modo de jogo gostaríamos de desativar a entrada e parar de mostrar o

127
00:09:30,620 --> 00:09:33,650
‫cursor, o que significa que vamos passar falso para isso.

128
00:09:33,650 --> 00:09:43,490
‫Então, vamos dizer tune tanks, player, controller, set player enabled state e estamos passando false para isso e estamos usando tune

129
00:09:43,490 --> 00:09:49,340
‫tanks, player controller, o que significa que precisamos incluir tune tanks, player

130
00:09:49,340 --> 00:09:50,300
‫controller.

131
00:09:50,300 --> 00:09:56,570
‫Então aqui no topo vamos incluir tanques de sintonia, controle de jogador.

132
00:09:57,620 --> 00:10:00,890
‫E agora temos esse tipo definido de OC.

133
00:10:00,890 --> 00:10:02,630
‫Vamos em frente e compilar isso.

134
00:10:02,780 --> 00:10:08,630
‫E a última coisa que faremos antes de encerrarmos isso é entrar no projeto do controlador do player

135
00:10:08,630 --> 00:10:15,320
‫e gostaria que você role para baixo até a seção de interface do mouse e verá que ele diz Default Mouse Cursor.

136
00:10:15,350 --> 00:10:19,730
‫Agora podemos clicar no menu suspenso e há vários cursores diferentes para escolher.

137
00:10:19,730 --> 00:10:21,770
‫E eu vou escolher Crosshairs.

138
00:10:21,950 --> 00:10:27,830
‫Agora, ainda não estamos mostrando o cursor do mouse, mas assim que iniciarmos o jogo, vamos mostrar o cursor.

139
00:10:27,830 --> 00:10:33,920
‫E quando o fazemos, gosto que seja uma mira em vez da seta branca padrão que sempre vemos quando olhamos para o

140
00:10:33,920 --> 00:10:35,060
‫cursor do mouse.

141
00:10:35,060 --> 00:10:41,330
‫Portanto, defina o cursor padrão do mouse para mira e poderemos ver essas miras assim que ativarmos

142
00:10:41,330 --> 00:10:43,040
‫o cursor do mouse.

143
00:10:43,040 --> 00:10:50,540
‫Então, em resumo, criamos uma classe de controlador de player personalizada e estamos usando isso para habilitar ou desabilitar a entrada

144
00:10:50,540 --> 00:10:53,420
‫com uma função que colocamos nessa classe.

145
00:10:53,420 --> 00:10:59,420
‫E também estamos usando essa função para mostrar o cursor do mouse ou ocultar o cursor do mouse com base no

146
00:10:59,420 --> 00:11:00,290
‫booleano passado.

147
00:11:00,290 --> 00:11:06,350
‫E no projeto que criamos, definimos o tipo de cursor do mouse e veremos muito em breve como é

148
00:11:06,350 --> 00:11:12,140
‫o cursor do mouse em cruz quando começamos a mostrar o cursor do mouse quando o jogo começa.

149
00:11:12,140 --> 00:11:12,980
‫Tão grande trabalho.

150
00:11:12,980 --> 00:11:18,620
‫Agora temos este controlador de jogador e estamos prontos para continuar implementando a funcionalidade do jogo.

151
00:11:18,620 --> 00:11:20,810
‫Então te vejo no próximo vídeo.

