﻿1
00:00:04,330 --> 00:00:05,170
‫Olá e bem-vindo.

2
00:00:05,170 --> 00:00:12,100
‫Nesta palestra, veremos algumas escolhas em nossas árvores de comportamento, de modo que eu possa fazer um inimigo

3
00:00:12,100 --> 00:00:20,200
‫correr em minha direção e, se ele me perder de vista, ele chegará ao meu último local conhecido fazendo basicamente dois comportamentos

4
00:00:20,590 --> 00:00:24,190
‫uma perseguição e, em seguida, Eu investigo o comportamento.

5
00:00:24,190 --> 00:00:26,050
‫Vamos mergulhar e ver como isso é possível.

6
00:00:26,050 --> 00:00:27,130
‫Usando árvores de comportamento.

7
00:00:28,530 --> 00:00:34,530
‫Portanto, embora esse comportamento de patrulhamento seja muito instrutivo, não é realmente o tipo de comportamento que

8
00:00:34,530 --> 00:00:35,280
‫queremos implementar.

9
00:00:35,790 --> 00:00:39,150
‫O que preferimos ter é algo ao longo das seguintes linhas.

10
00:00:39,330 --> 00:00:44,580
‫Quando podemos ver o jogador, vamos e nos aproximamos dele o máximo que podemos.

11
00:00:45,330 --> 00:00:51,840
‫E quando o jogador sai de vista, tentamos nos mover para o último local conhecido do jogador para

12
00:00:51,840 --> 00:00:52,500
‫encontrá-lo.

13
00:00:52,800 --> 00:00:58,410
‫E uma vez que tenhamos esgotado essa opção, talvez voltemos para um local diferente, ou talvez

14
00:00:58,410 --> 00:01:00,150
‫fiquemos lá por enquanto.

15
00:01:00,930 --> 00:01:02,400
‫Então, como podemos conseguir isso?

16
00:01:02,430 --> 00:01:05,880
‫Bem, no momento, não temos como conseguir isso com uma sequência de ações.

17
00:01:05,880 --> 00:01:09,200
‫Precisamos fazer uma escolha com base nos dados que temos disponíveis.

18
00:01:09,210 --> 00:01:15,210
‫Precisamos escolher se podemos ver o jogador ou não, se temos ou não a localização

19
00:01:15,210 --> 00:01:18,450
‫do último jogador conhecido, esse tipo de coisa.

20
00:01:18,870 --> 00:01:24,000
‫Então, para fazer isso, precisamos de um novo tipo de nó na árvore de comportamento chamado nota seletora.

21
00:01:24,060 --> 00:01:29,070
‫Então, se clicarmos com o botão direito do mouse e olharmos para nossas composições, uma das opções é o seletor.

22
00:01:29,550 --> 00:01:33,090
‫Agora, o seletor, em oposição à sequência, é executado dessa maneira.

23
00:01:33,480 --> 00:01:40,410
‫Se você tiver várias tarefas abaixo do seletor, ele será executado até que a primeira seja bem-sucedida.

24
00:01:40,830 --> 00:01:45,150
‫E basicamente é esperar que todos eles falhem até que um deles tenha sucesso.

25
00:01:45,780 --> 00:01:48,140
‫Agora a sequência fez o oposto.

26
00:01:48,150 --> 00:01:50,220
‫Ele executa todos eles até que um deles falhe.

27
00:01:50,730 --> 00:01:52,750
‫Então, por que isso é útil?

28
00:01:52,800 --> 00:01:56,610
‫Por que é útil que o seletor execute um deles até que um deles seja bem-sucedido?

29
00:01:56,610 --> 00:02:00,900
‫Porque basicamente queremos que ele escolha a primeira opção viável.

30
00:02:01,920 --> 00:02:06,780
‫Agora, a maneira como faremos isso não é executando tarefas sob o seletor, mas

31
00:02:06,780 --> 00:02:08,910
‫executando sequências sob o seletor.

32
00:02:08,910 --> 00:02:12,120
‫Então, no nível raiz, faremos uma nota de seletor.

33
00:02:12,690 --> 00:02:16,920
‫E abaixo disso, vamos apenas mover essa sequência de lado e criar outras sequências.

34
00:02:17,250 --> 00:02:19,930
‫Nós vamos ter uma sequência aqui.

35
00:02:20,670 --> 00:02:26,640
‫E o que podemos fazer é renomear a sequência de ser sequência para algo como Chase.

36
00:02:27,330 --> 00:02:35,010
‫E então podemos adicionar outra sequência aqui, que vai seguir as linhas de investigação.

37
00:02:36,050 --> 00:02:41,330
‫E esses são basicamente nossos dois comportamentos que queremos poder escolher.

38
00:02:42,260 --> 00:02:48,980
‫E para fazê-los falhar, podemos adicionar coisas aos nós chamados decoradores.

39
00:02:49,370 --> 00:02:54,890
‫Então, se você clicar com o botão direito em um nó e adicionar decorador, você pode ver aqui que há várias opções aqui.

40
00:02:55,460 --> 00:02:59,330
‫E eles basicamente mudam a maneira como esse nó funciona.

41
00:02:59,450 --> 00:03:00,890
‫Então eles podem fazer isso de várias maneiras.

42
00:03:00,920 --> 00:03:05,810
‫Por exemplo, temos esse loop condicional que permite que você faça um loop por todas as ações

43
00:03:05,810 --> 00:03:08,720
‫novamente na sequência quantas vezes essa condicional estiver correta.

44
00:03:09,200 --> 00:03:15,800
‫Temos outras coisas aqui, como uma verificação de código, que é sobre visibilidade e outras coisas lindas.

45
00:03:15,800 --> 00:03:17,660
‫Temos apenas um loop puro.

46
00:03:18,090 --> 00:03:19,350
‫Temos um limite de tempo.

47
00:03:19,370 --> 00:03:23,240
‫Então, só podemos ficar dentro dessa sequência por um certo período de tempo.

48
00:03:23,540 --> 00:03:27,020
‫Basicamente muitas coisas que modificam o comportamento desta sequência.

49
00:03:27,290 --> 00:03:33,290
‫Mas o que nos interessa é o quadro-negro, porque esta é uma condição de quadro-negro.

50
00:03:33,290 --> 00:03:38,360
‫E como você pode ver a partir da escrita abaixo dele, o padrão é algo ao longo das linhas

51
00:03:38,360 --> 00:03:39,710
‫de este auto ato definido?

52
00:03:40,250 --> 00:03:46,940
‫E se isso não estiver definido, automaticamente esse nó e tudo abaixo dele falharão, o que significa que

53
00:03:46,940 --> 00:03:50,810
‫nosso seletor passará para a opção dois, que é investigar.

54
00:03:51,290 --> 00:03:53,800
‫Então, neste caso, nós realmente queremos mudar isso.

55
00:03:53,810 --> 00:03:55,160
‫Queremos mudar a forma como isso funciona.

56
00:03:55,160 --> 00:04:02,120
‫Portanto, nossa localização do player, queremos que seja definida apenas quando o player estiver visível.

57
00:04:02,510 --> 00:04:09,980
‫E então queremos adicionar uma nova variável aqui novamente, um vetor que será o último local conhecido do jogador e

58
00:04:10,400 --> 00:04:16,010
‫o último local conhecido do jogador quando o jogador estiver visível será o mesmo.

59
00:04:16,490 --> 00:04:20,660
‫Mas uma vez que o jogador se torna invisível, a localização do jogador fica indefinida.

60
00:04:21,080 --> 00:04:23,840
‫E o último local conhecido do jogador é onde queremos ir.

61
00:04:24,620 --> 00:04:30,230
‫Então, podemos fazer isso indo para nossa condição Blackboard Base e apenas alterando-a para que

62
00:04:30,230 --> 00:04:31,850
‫a consulta seja Sim.

63
00:04:32,300 --> 00:04:35,300
‫Mas o que queremos que seja definido é a localização do jogador.

64
00:04:35,300 --> 00:04:41,900
‫Então, se o local de jogo está definido, então vamos perseguir e vamos dar Chase fazendo

65
00:04:41,900 --> 00:04:47,960
‫basicamente apenas um movimento para e vamos nos mover para o local do jogador.

66
00:04:47,960 --> 00:04:51,730
‫Então agora não estamos fazendo muito mais na sequência.

67
00:04:51,740 --> 00:04:57,240
‫Então, na verdade, você também pode colocar essa condição de quadro-negro diretamente em movimento.

68
00:04:57,680 --> 00:05:01,700
‫Mas porque podemos querer fazer outras coisas, como filmar, vou deixar como uma sequência por

69
00:05:01,700 --> 00:05:02,150
‫enquanto.

70
00:05:02,660 --> 00:05:04,010
‫Então temos esta investigação.

71
00:05:04,010 --> 00:05:10,430
‫Investigate basicamente também fará um movimento, mas ele se moverá para em vez de se mover para

72
00:05:10,460 --> 00:05:15,980
‫o local do jogador, ele se moverá para o último local conhecido do jogador.

73
00:05:16,580 --> 00:05:22,730
‫E você pode ver que não temos uma condição para isso, porque isso falha se essa condição falhar.

74
00:05:23,420 --> 00:05:29,210
‫Uma coisa importante a ser observada sobre essas condições do quadro-negro é que, por padrão, uma vez que

75
00:05:29,210 --> 00:05:33,890
‫tomamos a decisão de começar a executar este nó, não vamos reavaliar isso.

76
00:05:34,160 --> 00:05:39,770
‫Então, se por algum motivo perdermos o jogador de vista enquanto estamos nos movendo para a localização desse

77
00:05:39,770 --> 00:05:41,570
‫jogador, continuaremos tentando chegar lá.

78
00:05:42,080 --> 00:05:49,580
‫Então, se quisermos abortar a execução desta nota, há uma opção para isso.

79
00:05:49,580 --> 00:05:53,720
‫Se você for para o controle de fluxo, há observadores de notificação e há abaixo dele.

80
00:05:53,720 --> 00:05:56,030
‫O observador aborta no momento definido como nenhum.

81
00:05:56,600 --> 00:05:58,490
‫Mas você pode selecionar entre algumas opções.

82
00:05:59,180 --> 00:06:00,590
‫Você pode configurá-lo para si mesmo.

83
00:06:00,860 --> 00:06:07,790
‫Então, isso está dizendo que se essa condição de repente se tornar falsa, pare o que estiver fazendo e

84
00:06:07,790 --> 00:06:09,710
‫reavalie seu seletor e veja.

85
00:06:09,740 --> 00:06:12,050
‫Talvez agora precisemos fazer a nota de investigação.

86
00:06:12,650 --> 00:06:18,470
‫A outra opção aqui é de menor prioridade e você pode ver que mudou o que está destacado aqui.

87
00:06:18,470 --> 00:06:24,380
‫Está dizendo que se de repente essa condição do quadro-negro se tornar verdadeira, pare tudo o que estávamos fazendo e

88
00:06:24,380 --> 00:06:26,790
‫comece a executar essa condição de perseguição.

89
00:06:27,380 --> 00:06:29,630
‫E então a opção final é ambos.

90
00:06:29,900 --> 00:06:31,050
‫E este é o que queremos.

91
00:06:31,070 --> 00:06:37,160
‫Basicamente, está dizendo que essa condição baseada no quadro-negro, se se tornar verdadeira, começamos a executar

92
00:06:37,160 --> 00:06:38,480
‫a sequência imediatamente.

93
00:06:38,690 --> 00:06:44,100
‫Se se tornar falso, paramos de executá-lo imediatamente ou paramos de executar o que mais estava acontecendo.

94
00:06:44,120 --> 00:06:51,350
‫Basicamente, queremos sempre ir e fazer qualquer caminho que seja ditado por essa condição de quadro-negro.

95
00:06:51,350 --> 00:06:56,690
‫Portanto, espero que faça sentido que os relatórios do observador parem as coisas em ação, caso contrário, ele

96
00:06:56,690 --> 00:06:59,720
‫aguardará até que a ação seja concluída antes de reavaliar.

97
00:07:00,470 --> 00:07:07,370
‫Então, realmente, agora queremos ir em frente e implementar nosso último local conhecido e local de reprodução porque, no momento, se formos

98
00:07:07,640 --> 00:07:13,520
‫para o nosso C++ e nos dermos um pouco mais de espaço, você poderá ver que estamos apenas

99
00:07:13,520 --> 00:07:16,220
‫configurando isso local de jogo em Begin Play.

100
00:07:16,340 --> 00:07:21,380
‫Idealmente, faríamos isso toda vez que tivéssemos uma linha de visão para nosso grupo de jogadores, e assim podemos realmente

101
00:07:21,380 --> 00:07:23,540
‫descomentar nosso código de linha de visão aqui.

102
00:07:24,110 --> 00:07:27,320
‫E provavelmente queremos descomentar o código else também.

103
00:07:27,560 --> 00:07:32,300
‫Mas neste caso não vamos limpar o foco e parar o movimento diretamente.

104
00:07:32,300 --> 00:07:35,570
‫Eu posso ir em frente e removê-los inteiramente porque.

105
00:07:35,610 --> 00:07:37,590
‫Não é assim que estamos fazendo as coisas no momento.

106
00:07:38,130 --> 00:07:47,130
‫Em vez disso, o que queremos fazer, se eu remover o código, é estar aqui definindo a localização do

107
00:07:47,130 --> 00:07:47,940
‫jogador.

108
00:07:48,300 --> 00:07:53,500
‫Também queremos definir o último local conhecido lá.

109
00:07:54,000 --> 00:07:59,520
‫E de outra forma queremos limpar a localização do jogador.

110
00:08:00,270 --> 00:08:07,800
‫Agora, para fazer isso, temos uma função disponível para nós, que é em vez do valor definido como

111
00:08:07,800 --> 00:08:15,210
‫vetor, se formos em frente e abrirmos nosso componente do quadro-negro dot h, há um valor claro.

112
00:08:15,630 --> 00:08:21,150
‫E isso apenas leva o nome f não precisa ter um tipo ou qualquer coisa ou porque estamos

113
00:08:21,150 --> 00:08:23,850
‫apenas apagando completamente o que estava nessa variável.

114
00:08:24,570 --> 00:08:27,360
‫Então aqui eu tenho um desafio para você preencher o nosso carrapato.

115
00:08:27,780 --> 00:08:30,420
‫Defina as duas variáveis quando estiver na linha de visão.

116
00:08:30,450 --> 00:08:38,790
‫Basicamente, preencha este primeiro bit da instrução F e, em seguida, limpe a localização do player quando tivermos o

117
00:08:38,790 --> 00:08:39,240
‫else.

118
00:08:39,240 --> 00:08:41,940
‫Então, quando perdemos a linha de visão, não temos mais um local de jogo.

119
00:08:42,360 --> 00:08:48,300
‫Reduza a velocidade do inimigo que está no mundo para que você possa fugir dele mais facilmente.

120
00:08:48,630 --> 00:08:54,720
‫E então verifique a funcionalidade, verifique se você consegue se esconder atrás de uma esquina e se ele vai até o

121
00:08:54,720 --> 00:08:56,920
‫último local conhecido para tentar te encontrar.

122
00:08:57,330 --> 00:08:59,190
‫Pause o vídeo e experimente.

123
00:09:00,460 --> 00:09:00,780
‫OK.

124
00:09:00,790 --> 00:09:01,370
‫Bem vindo de volta.

125
00:09:01,390 --> 00:09:02,500
‫Então vamos dar uma chance a isso.

126
00:09:02,530 --> 00:09:04,210
‫Em primeiro lugar, estamos definindo o local de jogo.

127
00:09:04,210 --> 00:09:06,970
‫Vou tirá-lo do início do jogo e movê-lo aqui.

128
00:09:07,480 --> 00:09:12,670
‫Então, para definir a localização do jogador, precisamos colocar o jogador aqui e tomar novamente.

129
00:09:13,000 --> 00:09:14,320
‫Então eu vou descomentar essa linha.

130
00:09:14,800 --> 00:09:21,100
‫E então estamos fazendo exatamente a mesma coisa, exatamente a mesma linha de código para o nosso último local conhecido do

131
00:09:21,100 --> 00:09:21,930
‫jogador aqui.

132
00:09:21,940 --> 00:09:28,030
‫Então, vamos para o nosso quadro-negro e certifique-se de copiá-lo para obter exatamente o mesmo nome e, em seguida,

133
00:09:28,030 --> 00:09:33,100
‫queremos apenas esclarecer que a última coisa é limpar a localização do nosso jogador aqui.

134
00:09:33,100 --> 00:09:39,550
‫Portanto, será um valor claro e usará a localização do player de texto como o valor que

135
00:09:39,550 --> 00:09:41,740
‫estamos tentando limpar no final.

136
00:09:42,400 --> 00:09:46,600
‫E podemos ir em frente e compilar e ver se isso funciona.

137
00:09:48,700 --> 00:09:50,500
‫Enquanto Compile foi bem sucedido.

138
00:09:50,500 --> 00:09:56,500
‫A outra coisa que eu disse para fazer a depuração mais fácil foi selecionar o inimigo

139
00:09:56,500 --> 00:10:04,300
‫e podemos ir e mudar sua velocidade descendo para seus componentes de movimento e encontrando a caminhada e encontrando sua velocidade.

140
00:10:04,310 --> 00:10:07,060
‫Então a velocidade máxima de caminhada é 600 aqui.

141
00:10:07,390 --> 00:10:11,440
‫Vamos definir para 400 para que possamos facilmente fugir deles.

142
00:10:11,440 --> 00:10:15,140
‫Eles vão andar um pouco devagar e vão jogar.

143
00:10:15,160 --> 00:10:16,660
‫Eles estão caminhando em direção a um lentamente.

144
00:10:16,660 --> 00:10:17,740
‫Podemos fugir.

145
00:10:18,130 --> 00:10:20,230
‫Escondemo-nos atrás de uma esquina e lá vão eles.

146
00:10:20,230 --> 00:10:22,570
‫Venha nos procurar cada vez.

147
00:10:22,960 --> 00:10:27,820
‫Mas espero que se nos escondermos atrás de duas curvas, eles não serão capazes de nos encontrar.

148
00:10:28,240 --> 00:10:30,880
‫Então eu escondo lá, escondo aqui, escondo aqui.

149
00:10:31,330 --> 00:10:35,320
‫E ele vai investigar o último local conhecido, você vê, ele acabou de enfiar a

150
00:10:35,320 --> 00:10:39,490
‫cabeça na esquina, mas então ele está preso lá porque ele não sabe o que fazer.

151
00:10:39,940 --> 00:10:46,870
‫E se fôssemos dar uma olhada em nossa árvore de comportamento e simplesmente colocássemos isso de um lado e o jogo para

152
00:10:46,870 --> 00:10:49,870
‫o outro e me desse um pouco de espaço.

153
00:10:50,350 --> 00:10:54,850
‫Então, se dermos uma olhada na árvore de comportamento, podemos ver que está meio agitado por aqui

154
00:10:54,850 --> 00:10:56,560
‫porque não pode fazer nenhum deles.

155
00:10:56,560 --> 00:11:00,220
‫Ele está tentando se mover para o último local conhecido que está dando certo.

156
00:11:00,460 --> 00:11:01,720
‫Então está ficando meio travado aqui.

157
00:11:02,020 --> 00:11:05,710
‫Mas se eu aparecer, você pode ver que ele está se movendo em minha direção.

158
00:11:06,070 --> 00:11:11,530
‫Se ele me perder de vista, ele passa para a condição de investigador.

159
00:11:11,920 --> 00:11:12,730
‫Então perca a visão.

160
00:11:12,730 --> 00:11:13,840
‫Ele vai investigar.

161
00:11:14,230 --> 00:11:17,890
‫E então ele vem e me vê e depois volta a me perseguir.

162
00:11:18,250 --> 00:11:20,740
‫Portanto, esse comportamento está realmente funcionando.

163
00:11:20,740 --> 00:11:29,650
‫Agora podemos escolher entre tentar perseguir e tentar investigar com base nesse comportamento do quadro-negro.

164
00:11:29,650 --> 00:11:37,060
‫Vamos apenas mudar o nome deste quadro-negro para comportamento aqui para ver jogar um ponto de interrogação.

165
00:11:37,300 --> 00:11:38,860
‫Então vai ser muito mais fácil de ler.

166
00:11:38,860 --> 00:11:43,960
‫Agora que temos esse seletor, podemos ver o jogo, então devemos persegui-lo, caso contrário, devemos

167
00:11:43,960 --> 00:11:48,820
‫investigar e podemos excluir essa sequência aqui porque ela não está mais em uso.

168
00:11:49,300 --> 00:11:54,700
‫Então, espero que agora você tenha uma compreensão melhor de como as árvores de comportamento podem

169
00:11:54,700 --> 00:12:01,390
‫ser vinculadas para criar escolha e sequência e colocar muitas tarefas juntas para tornar comportamentos mais complexos com muita facilidade.

170
00:12:01,780 --> 00:12:07,990
‫Na próxima palestra, veremos como podemos criar nossas próprias tarefas personalizadas em C++ para que possamos

171
00:12:07,990 --> 00:12:10,330
‫obter alguma ação de tiro.

172
00:12:10,450 --> 00:12:11,740
‫Vejo vocês no próximo vídeo.

