﻿1
00:00:04,340 --> 00:00:05,510
‫Olá e bem-vindo.

2
00:00:05,510 --> 00:00:09,110
‫Nesta palestra, temos um A. EU. que está nos seguindo ao redor do mundo.

3
00:00:09,110 --> 00:00:11,540
‫Iremos investigar quando ele me perder de vista.

4
00:00:11,540 --> 00:00:13,430
‫Então é muito difícil perder.

5
00:00:13,850 --> 00:00:20,030
‫Mas se eu for muito longe, ele não será capaz de acompanhar e, eventualmente, ele

6
00:00:20,030 --> 00:00:24,920
‫perderá o interesse e voltará ao seu local de partida lá.

7
00:00:25,430 --> 00:00:30,800
‫Isso é o que vamos implementar nesta palestra, terminando nossa tarefa de árvore de comportamento.

8
00:00:31,070 --> 00:00:32,720
‫Vamos mergulhar e ver como é feito.

9
00:00:33,610 --> 00:00:38,280
‫Então, queremos que nossa tarefa seja executada, para realmente fazer alguma coisa.

10
00:00:38,290 --> 00:00:42,190
‫E particularmente queríamos poder limpar o Blackboard Valley, fazer o que diz na lata.

11
00:00:42,880 --> 00:00:44,650
‫Então, como vamos fazer isso?

12
00:00:44,890 --> 00:00:49,180
‫Bem, para isso, precisamos ir até nossa classe base e dar uma olhada no que está implementado lá.

13
00:00:49,190 --> 00:00:55,290
‫Na verdade, precisamos subir um nível mais alto, o que, como você pode ver na herança

14
00:00:55,420 --> 00:00:57,790
‫da tarefa otimista Blackboard Base.

15
00:00:57,790 --> 00:01:00,250
‫Acima disso, temos o nó de tarefa UBC.

16
00:01:00,670 --> 00:01:05,290
‫Então, vamos usar F12 para navegar até a implementação lá.

17
00:01:05,290 --> 00:01:12,640
‫E se você rolar até o topo da barra de tarefas do nó do cabeçalho do arquivo, poderá ver que há informações

18
00:01:12,640 --> 00:01:13,690
‫sobre essa classe.

19
00:01:13,690 --> 00:01:18,580
‫E o mais importante é que essas são as funções virtuais que provavelmente

20
00:01:18,580 --> 00:01:19,690
‫queremos implementar.

21
00:01:20,350 --> 00:01:22,480
‫Então, o primeiro é executar a tarefa.

22
00:01:22,480 --> 00:01:25,780
‫Isso é chamado quando a tarefa começa a ser executada.

23
00:01:26,590 --> 00:01:32,710
‫Temos então uma tarefa de placa, que é quando é decidido que precisamos parar de executar, por

24
00:01:32,710 --> 00:01:37,030
‫exemplo, porque uma condição se tornou falsa e temos essa sinalização configurada.

25
00:01:37,030 --> 00:01:38,490
‫Portanto, ele aborta essa tarefa.

26
00:01:39,070 --> 00:01:43,690
‫A tarefa de tique acontece o tempo todo em que a tarefa está sendo executada, mas não no primeiro tique.

27
00:01:43,690 --> 00:01:49,330
‫Portanto, a primeira tarefa chamará a tarefa de execução e continuará chamando uma tarefa de marcação todas as vezes.

28
00:01:50,230 --> 00:01:56,140
‫E isso é para comportamentos que podem durar mais de um tique, como mover-se para um inimigo que pode

29
00:01:56,140 --> 00:01:57,160
‫levar vários tiques.

30
00:01:57,520 --> 00:01:59,650
‫Então, a tarefa tick nos permite fazer alguma coisa.

31
00:01:59,650 --> 00:02:05,230
‫Cada tick e on message é para outras coisas além de abortar que pode enviar uma mensagem para esta

32
00:02:05,230 --> 00:02:05,680
‫tarefa.

33
00:02:05,920 --> 00:02:09,220
‫Nós realmente não temos que nos preocupar com essa função em particular.

34
00:02:09,220 --> 00:02:10,750
‫Assim, os três primeiros estão prontos.

35
00:02:10,750 --> 00:02:16,870
‫Os que estavam mais interessados e vendo que nossa tarefa é simplesmente limpar o valor do

36
00:02:16,870 --> 00:02:21,200
‫quadro-negro assim que ele for executado e então terminará imediatamente.

37
00:02:21,420 --> 00:02:23,890
‫Ele não precisa fazer coisas em vários ticks.

38
00:02:24,190 --> 00:02:26,830
‫Estamos interessados na tarefa de execução.

39
00:02:27,310 --> 00:02:33,670
‫Portanto, se pesquisarmos neste cabeçalho de arquivo por tarefa de execução, você poderá ver que a assinatura completa está aqui e

40
00:02:33,670 --> 00:02:37,150
‫o tipo de retorno aqui é o resultado do nó IBT.

41
00:02:38,200 --> 00:02:43,420
‫E leva em duas coisas o componente proprietário e a memória do nó.

42
00:02:43,840 --> 00:02:48,820
‫Agora, a razão pela qual ela ocupa a memória do nó é um

43
00:02:48,820 --> 00:02:58,860
‫pouco complicada, mas o importante a saber aqui é que uma classe de tarefa ou instância de classe de tarefa, há apenas uma delas por todos os quadros-negros.

44
00:02:58,870 --> 00:03:04,930
‫Essencialmente, eles são compartilhados entre tudo, e é por isso que, se você deseja salvar algumas

45
00:03:04,930 --> 00:03:12,310
‫informações relacionadas a um nó em uma árvore de comportamento específica, o que você precisa fazer é armazená-las nesse ponteiro

46
00:03:12,310 --> 00:03:13,420
‫de memória.

47
00:03:13,750 --> 00:03:16,150
‫Mas não vamos fazer nada relacionado a isso.

48
00:03:16,150 --> 00:03:18,520
‫É um pouco mais avançado precisar fazer isso.

49
00:03:18,700 --> 00:03:23,830
‫E há outras maneiras de contornar isso, como permitir que o Unreal crie várias instâncias para cada árvore de comportamento, o

50
00:03:23,830 --> 00:03:28,390
‫que pode ser um pouco legal ou não, mas essa é uma maneira um pouco mais eficiente e

51
00:03:28,390 --> 00:03:30,390
‫não precisamos nos preocupar com isso. isto.

52
00:03:30,400 --> 00:03:35,590
‫Em última análise, o que nos interessa é o fato de podermos chegar ao nosso componente proprietário, o componente da árvore de comportamento, e

53
00:03:35,590 --> 00:03:40,900
‫de lá podemos chegar a outras coisas, como o peão, etc. Mas isso também é assunto

54
00:03:40,900 --> 00:03:43,150
‫de outra palestra.

55
00:03:43,390 --> 00:03:48,760
‫Então o que é interessante e importante agora é apenas implementar e executar a tarefa.

56
00:03:48,970 --> 00:03:55,270
‫Então vamos copiar a assinatura, ir para Clear Blackboard Value Dot H e vamos ver, isso

57
00:03:55,270 --> 00:03:56,530
‫é público agora?

58
00:03:56,530 --> 00:03:59,830
‫Acho que isso será protegido porque está na seção padrão.

59
00:04:00,130 --> 00:04:05,170
‫Então, vamos criar uma seção protegida e colá-la lá e, em seguida, vamos em frente

60
00:04:05,170 --> 00:04:08,440
‫e criar a substituição apenas para garantir a segurança.

61
00:04:08,440 --> 00:04:14,440
‫E então vamos criar uma implementação no C++, lembrando que sempre queremos chamar super

62
00:04:14,440 --> 00:04:21,460
‫quando estamos substituindo a tarefa super execute com o componente proprietário e a memória do nó

63
00:04:21,460 --> 00:04:24,370
‫sendo chamada para nosso pai aqui.

64
00:04:24,430 --> 00:04:30,640
‫E então o que queremos fazer é pegar nosso quadro-negro para que possamos limpar a chave.

65
00:04:30,730 --> 00:04:32,200
‫E há duas coisas que são importantes aqui.

66
00:04:32,200 --> 00:04:35,110
‫Em primeiro lugar, como sabemos qual chave foi selecionada?

67
00:04:35,110 --> 00:04:41,170
‫Bem, se formos ao nosso quadro-negro com base em H, você poderá ver que um dos métodos é obter a chave

68
00:04:41,170 --> 00:04:42,280
‫do quadro-negro selecionada.

69
00:04:42,280 --> 00:04:48,160
‫Assim, você pode facilmente chamar isso de qualquer C++, obter a chave do quadro-negro selecionada e isso retornará.

70
00:04:48,160 --> 00:04:54,010
‫Se passarmos o mouse sobre ele, ele retornará um nome F, o nome F da tecla do quadro-negro que foi selecionada na árvore

71
00:04:54,040 --> 00:04:54,700
‫de comportamento.

72
00:04:54,700 --> 00:04:59,380
‫Agora, a outra coisa que precisamos fazer é realmente conseguir pegar o quadro-negro relacionado a essa árvore

73
00:04:59,380 --> 00:05:00,250
‫de comportamento.

74
00:05:00,250 --> 00:05:02,110
‫Então, para isso, temos o nosso próprio comp.

75
00:05:02,500 --> 00:05:07,810
‫Agora observe aqui que o tipo de composição do proprietário que está sendo passado aqui é na verdade uma referência, não um ponteiro.

76
00:05:08,110 --> 00:05:09,820
‫Portanto, não pode ser nulo para começar.

77
00:05:09,820 --> 00:05:10,510
‫Isso é ótimo.

78
00:05:10,810 --> 00:05:15,520
‫Mas também significa que precisamos usar o operador DOT em vez do

79
00:05:15,520 --> 00:05:21,820
‫operador de seta porque não estamos usando um ponteiro e daqui podemos simplesmente obter os componentes do quadro-negro.

80
00:05:21,940 --> 00:05:24,360
‫Então, isso apenas obtém o componente do quadro-negro se você passar o mouse sobre ele.

81
00:05:24,370 --> 00:05:29,470
‫Este é um ponteiro para um componente de quadro-negro, portanto, você precisará usar operadores de seta.

82
00:05:29,470 --> 00:05:32,650
‫Então já sabemos como limpar as teclas no quadro-negro.

83
00:05:33,240 --> 00:05:34,500
‫Esse vai ser o seu desafio.

84
00:05:34,530 --> 00:05:36,660
‫Espero que o desafio não seja muito complicado.

85
00:05:36,670 --> 00:05:38,400
‫Você deseja limpar a chave selecionada.

86
00:05:38,740 --> 00:05:41,520
‫Podemos verificar onde já fizemos isso antes.

87
00:05:42,210 --> 00:05:44,850
‫Você precisa de alguma inclusão para fazer isso?

88
00:05:44,850 --> 00:05:47,070
‫Talvez o quadro-negro precise.

89
00:05:47,070 --> 00:05:53,500
‫Inclua use a chave selecionada em sua árvore de comportamento como a chave que queremos limpar.

90
00:05:53,520 --> 00:05:55,320
‫Então pause o vídeo e vá em frente.

91
00:05:55,530 --> 00:05:55,920
‫OK.

92
00:05:55,920 --> 00:05:56,460
‫Bem vindo de volta.

93
00:05:56,790 --> 00:05:58,720
‫Então vamos dar uma chance a isso.

94
00:05:58,740 --> 00:06:01,530
‫Então, a primeira coisa é que temos nosso componente de quadro-negro.

95
00:06:01,530 --> 00:06:03,000
‫Vamos usar o operador de seta aqui.

96
00:06:03,330 --> 00:06:04,290
‫Não está surgindo nada.

97
00:06:04,590 --> 00:06:11,850
‫Então, estou assumindo que preciso e, de fato, há alguns rabiscos vermelhos, preciso de um hash incluído aqui para fazer a árvore

98
00:06:11,850 --> 00:06:15,930
‫de comportamento e, em seguida, o componente do quadro-negro aqui e agora.

99
00:06:15,930 --> 00:06:21,240
‫Espero que meu autocomplete esteja funcionando, o que me permitirá ter o clear.

100
00:06:21,240 --> 00:06:23,550
‫Vamos tentar refrescar nossas memórias.

101
00:06:23,550 --> 00:06:25,150
‫Onde já fizemos isso antes?

102
00:06:25,170 --> 00:06:30,120
‫Se formos atirar, eu controlo A e dou uma olhada no que temos aqui.

103
00:06:30,120 --> 00:06:31,440
‫Temos um valor claro.

104
00:06:31,440 --> 00:06:32,730
‫É esse que estamos procurando.

105
00:06:32,730 --> 00:06:35,400
‫Então, vamos tentar esse valor claro.

106
00:06:35,400 --> 00:06:36,510
‫E o que leva?

107
00:06:36,510 --> 00:06:41,100
‫Ele aceita uma tecla F ou um nome F, ótimo nome f que podemos obter.

108
00:06:41,490 --> 00:06:46,800
‫E onde dissemos que poderíamos obter isso com a chave do quadro-negro get selected que está nesta classe porque

109
00:06:46,800 --> 00:06:48,000
‫está na classe pai.

110
00:06:48,000 --> 00:06:53,880
‫Então, selecione a chave do quadro-negro Simples assim, estamos limpando o valor da chave do quadro-negro selecionada.

111
00:06:53,910 --> 00:06:55,530
‫Agora, uma última coisa que precisamos fazer.

112
00:06:55,530 --> 00:06:57,030
‫Isso não fazia parte do desafio, então não se preocupe.

113
00:06:57,030 --> 00:07:03,150
‫Se você não sabia disso é que precisamos retornar porque existe um valor de retorno para clear blackboard value

114
00:07:03,180 --> 00:07:06,780
‫execute task e o valor de retorno é bem interessante.

115
00:07:06,780 --> 00:07:07,350
‫Vamos dar uma olhada.

116
00:07:07,350 --> 00:07:12,570
‫Vamos seguir com um F12 e ver quais diferentes status podemos retornar do nosso teste de execução.

117
00:07:12,600 --> 00:07:14,370
‫Agora o primeiro foi bem sucedido.

118
00:07:14,380 --> 00:07:14,700
‫Excelente.

119
00:07:14,700 --> 00:07:19,470
‫Isso basicamente sinaliza para a árvore de comportamento que esta nota terminou de ser executada e podemos passar

120
00:07:19,800 --> 00:07:20,790
‫para a próxima.

121
00:07:20,820 --> 00:07:21,870
‫Falhou de novo.

122
00:07:21,870 --> 00:07:27,420
‫Este é um finalizado para que possamos passar para o próximo, mas desta vez está dizendo que falhou.

123
00:07:27,420 --> 00:07:34,230
‫Então, isso fornece as diferentes indicações para, por exemplo, nossos nós de sequência ou nossos nós selecionados sobre o que

124
00:07:34,230 --> 00:07:36,510
‫esses nós deveriam realmente estar fazendo.

125
00:07:37,320 --> 00:07:44,610
‫Então fomos abortados, o que é basicamente o mesmo que fracasso e temos em andamento.

126
00:07:44,970 --> 00:07:51,330
‫Se você retornar em andamento de uma tarefa de execução, basicamente dirá que você deve continuar chamando tick até

127
00:07:51,360 --> 00:07:57,090
‫que eu diga o contrário, até que eu diga que terminei agora, não vamos usar isso.

128
00:07:57,090 --> 00:08:02,670
‫Mas é bom ter em mente que, se você precisar criar uma tarefa que seja de longa duração,

129
00:08:02,670 --> 00:08:06,030
‫seja executada em vários ticks, teremos que retornar em andamento.

130
00:08:06,030 --> 00:08:07,980
‫Mas como eu disse, queremos sucesso.

131
00:08:08,520 --> 00:08:10,200
‫Então vamos entrar e fazer isso.

132
00:08:10,200 --> 00:08:12,450
‫Retorna o resultado do nó vazio.

133
00:08:13,470 --> 00:08:14,280
‫Cólon.

134
00:08:14,580 --> 00:08:20,280
‫E será bem-sucedido porque conseguimos limpar esse valor basicamente, não importa o quê.

135
00:08:20,880 --> 00:08:25,440
‫Então podemos ir em frente e salvar tudo isso, ir até o editor e clicar em compilar.

136
00:08:25,440 --> 00:08:31,470
‫E quando isso estiver completo, vamos em frente e abrir nossa IA e a árvore de comportamento.

137
00:08:31,710 --> 00:08:33,300
‫Então esse é um inimigo Beattie?

138
00:08:33,450 --> 00:08:35,460
‫Eu o encaixo na janela principal e vamos dar uma olhada.

139
00:08:35,460 --> 00:08:36,600
‫Temos um quadro-negro claro.

140
00:08:36,600 --> 00:08:42,060
‫O valor agora deve permitir que nos movamos para o último local conhecido, limpe o valor

141
00:08:42,060 --> 00:08:48,840
‫do quadro-negro, aguarde cinco e, em seguida, veremos que a investigação deste último local de jogo conhecido deve ser desativada,

142
00:08:48,840 --> 00:08:52,170
‫portanto, devemos voltar ao nosso local de início .

143
00:08:52,170 --> 00:08:56,760
‫Então, vamos ver se esse comportamento está funcionando agora que a tarefa foi totalmente implementada.

144
00:08:56,760 --> 00:09:00,120
‫Então ele está vindo até mim, ele está me investigando.

145
00:09:00,570 --> 00:09:01,620
‫Eu vou me esconder.

146
00:09:01,770 --> 00:09:02,340
‫Então vamos entrar.

147
00:09:02,340 --> 00:09:04,170
‫Hides está vindo para investigar.

148
00:09:04,170 --> 00:09:05,310
‫Vamos nos esconder novamente.

149
00:09:05,850 --> 00:09:06,990
‫Então vá e se esconda.

150
00:09:07,770 --> 00:09:09,810
‫Vamos ver se conseguimos localizá-lo por lá.

151
00:09:10,170 --> 00:09:15,870
‫Ele deveria estar esperando no momento e então ele está voltando para seu local de partida, o

152
00:09:16,050 --> 00:09:18,270
‫que infelizmente o faz cruzar comigo.

153
00:09:18,510 --> 00:09:25,350
‫Então, vamos ver se isso está realmente funcionando como esperamos, trazendo nosso inimigo pela janela e

154
00:09:25,380 --> 00:09:29,790
‫ancorando à direita e colocando nossa janela principal à esquerda.

155
00:09:29,790 --> 00:09:34,830
‫É um pouco apertado, mas podemos nos virar e então vamos tentar escapar desse cara mais uma vez

156
00:09:34,830 --> 00:09:37,770
‫e ver o que acontece com o comportamento dele.

157
00:09:37,770 --> 00:09:41,670
‫Você pode ver que ele está se movendo para o último local de jogo conhecido.

158
00:09:42,540 --> 00:09:45,810
‫E agora ele está esperando, tendo limpado o vale.

159
00:09:46,050 --> 00:09:47,910
‫E então você pode ver que ele vai se mexer também.

160
00:09:47,910 --> 00:09:53,010
‫E você pode ver que essas barras vermelhas nos decoradores estão nos dizendo que nenhuma dessas duas condições

161
00:09:53,310 --> 00:09:53,970
‫é verdadeira.

162
00:09:53,970 --> 00:09:57,660
‫Então ele não pode fazer nenhum desses finalmente se mover para o local de partida.

163
00:09:57,930 --> 00:10:00,930
‫Então agora está piscando porque basicamente não pode fazer nada.

164
00:10:01,440 --> 00:10:09,780
‫Então, basicamente, é que nesta palestra vimos como podemos obter as tarefas de batida para executar o código, entendemos os diferentes status que

165
00:10:09,780 --> 00:10:14,730
‫você pode retornar da tarefa de execução, como obter o quadro-negro da tarefa e

166
00:10:15,000 --> 00:10:19,710
‫também como ativar a tecla selecionada no momento uma tarefa de quadro-negro.

167
00:10:19,830 --> 00:10:26,280
‫Na próxima palestra, veremos como podemos obter o mundo fora da árvore de comportamento do quadro-negro, como podemos obter

168
00:10:26,280 --> 00:10:30,390
‫o peão de dentro de uma tarefa da árvore de comportamento.

169
00:10:30,420 --> 00:10:31,020
‫Eu vou ver isso.

