﻿1
00:00:04,340 --> 00:00:05,510
‫Hola y bienvenido.

2
00:00:05,510 --> 00:00:09,110
‫En esta conferencia, obtuvimos una A. YO. que nos sigue por todo el mundo.

3
00:00:09,110 --> 00:00:11,540
‫Iremos a investigar cuando me pierda de vista.

4
00:00:11,540 --> 00:00:13,430
‫Así que es bastante difícil de perder.

5
00:00:13,850 --> 00:00:20,030
‫Pero si me alejo demasiado en las curvas, no podrá seguir el ritmo y

6
00:00:20,030 --> 00:00:24,920
‫eventualmente perderá interés y regresará a su lugar de inicio allí.

7
00:00:25,430 --> 00:00:30,800
‫Eso es lo que vamos a implementar en esta lección al terminar nuestra tarea de árbol de comportamiento.

8
00:00:31,070 --> 00:00:32,720
‫Vamos a sumergirnos y ver cómo se hace.

9
00:00:33,610 --> 00:00:38,280
‫Así que queremos que nuestra tarea se ejecute, que realmente haga algo.

10
00:00:38,290 --> 00:00:42,190
‫Y particularmente queríamos poder limpiar ese Blackboard Valley, hacer lo que dice en la lata.

11
00:00:42,880 --> 00:00:44,650
‫Entonces, ¿cómo vamos a hacer eso?

12
00:00:44,890 --> 00:00:49,180
‫Bueno, para eso, tenemos que subir a nuestra clase base y echar un vistazo a lo que está implementado allí.

13
00:00:49,190 --> 00:00:55,290
‫De hecho, necesitamos subir un nivel más, lo cual, como puede ver en la herencia de

14
00:00:55,420 --> 00:00:57,790
‫la tarea optimista Blackboard Base.

15
00:00:57,790 --> 00:01:00,250
‫Por encima de eso, tenemos el nodo de tareas UBC.

16
00:01:00,670 --> 00:01:05,290
‫Así que usemos F12 para navegar a la implementación allí.

17
00:01:05,290 --> 00:01:12,640
‫Y si se desplaza hacia arriba hasta la parte superior del nodo de tarea de la barra en el encabezado del archivo, puede ver que hay información

18
00:01:12,640 --> 00:01:13,690
‫sobre esta clase.

19
00:01:13,690 --> 00:01:18,580
‫Y lo más importante es que estas son las funciones virtuales que es más probable

20
00:01:18,580 --> 00:01:19,690
‫que queramos implementar.

21
00:01:20,350 --> 00:01:22,480
‫Entonces, el primero es ejecutar la tarea.

22
00:01:22,480 --> 00:01:25,780
‫Esto se llama cuando la tarea comienza a ejecutarse.

23
00:01:26,590 --> 00:01:32,710
‫Luego tenemos una tarea de tablero, que es cuando se decide que debemos dejar de ejecutar, por ejemplo,

24
00:01:32,710 --> 00:01:37,030
‫porque una condición se ha vuelto falsa y tenemos configurada esa señalización.

25
00:01:37,030 --> 00:01:38,490
‫Entonces aborta esta tarea.

26
00:01:39,070 --> 00:01:43,690
‫La tarea de marca ocurre todo el tiempo que la tarea se está ejecutando, pero no la primera marca.

27
00:01:43,690 --> 00:01:49,330
‫Entonces, la primera tarea llamará a la tarea de ejecución y luego seguirá llamando a una tarea de verificación cada vez.

28
00:01:50,230 --> 00:01:56,140
‫Y eso es para comportamientos que pueden durar más de un tic, como moverse hacia un enemigo que puede

29
00:01:56,140 --> 00:01:57,160
‫tomar varios tics.

30
00:01:57,520 --> 00:01:59,650
‫Así que marcar la tarea nos permite hacer algo.

31
00:01:59,650 --> 00:02:05,230
‫Cada mensaje de marca y activación es para otras cosas además de cancelar que podrían enviar un mensaje a esta

32
00:02:05,230 --> 00:02:05,680
‫tarea.

33
00:02:05,920 --> 00:02:09,220
‫Realmente no tenemos que preocuparnos por esta función en particular.

34
00:02:09,220 --> 00:02:10,750
‫Así que los primeros tres están listos.

35
00:02:10,750 --> 00:02:16,870
‫Los que estaban más interesados y viendo que nuestra tarea simplemente va a borrar el valor de

36
00:02:16,870 --> 00:02:21,200
‫la pizarra tan pronto como se ejecute y luego terminará de inmediato.

37
00:02:21,420 --> 00:02:23,890
‫No necesita hacer cosas a través de múltiples ticks.

38
00:02:24,190 --> 00:02:26,830
‫Estamos interesados en la tarea de ejecución.

39
00:02:27,310 --> 00:02:33,670
‫Entonces, si buscamos en este encabezado de archivo para ejecutar la tarea, puede ver que la firma completa está aquí y

40
00:02:33,670 --> 00:02:37,150
‫el tipo de retorno aquí es este resultado de nodo IBT.

41
00:02:38,200 --> 00:02:43,420
‫Y toma en dos cosas el componente propietario y la memoria del nodo.

42
00:02:43,840 --> 00:02:48,820
‫Ahora, la razón por la que ocupa la memoria del nodo es un poco

43
00:02:48,820 --> 00:02:58,860
‫complicada, pero lo importante que debe saber aquí es que una clase de tarea o una instancia de clase de tarea, solo hay una de ellas en todas las pizarras.

44
00:02:58,870 --> 00:03:04,930
‫Esencialmente, se comparten entre todo, por lo que si desea guardar información relacionada con

45
00:03:04,930 --> 00:03:12,310
‫un nodo en un árbol de comportamiento particular, lo que debe hacer es almacenarla en este puntero

46
00:03:12,310 --> 00:03:13,420
‫de memoria.

47
00:03:13,750 --> 00:03:16,150
‫Pero no vamos a hacer nada relacionado con eso.

48
00:03:16,150 --> 00:03:18,520
‫Es un poco más avanzado necesitar hacer eso.

49
00:03:18,700 --> 00:03:23,830
‫Y hay otras formas de evitar esto, como permitir que Unreal cree múltiples instancias para cada árbol de comportamiento, lo

50
00:03:23,830 --> 00:03:28,390
‫que puede ser un poco ingenioso o no, pero esta es una forma un poco más eficiente

51
00:03:28,390 --> 00:03:30,390
‫y no tenemos que preocuparnos por eso.

52
00:03:30,400 --> 00:03:35,590
‫En última instancia, lo que nos interesa es el hecho de que podemos llegar a nuestro componente propietario, el componente del árbol de comportamiento,

53
00:03:35,590 --> 00:03:40,900
‫y desde allí podemos llegar a otras cosas como el peón, etc. Pero ese es también el

54
00:03:40,900 --> 00:03:43,150
‫tema de otra conferencia.

55
00:03:43,390 --> 00:03:48,760
‫Entonces, lo que es interesante e importante ahora es solo implementar y ejecutar la tarea.

56
00:03:48,970 --> 00:03:55,270
‫Así que vamos a copiar la firma, ir a Clear Blackboard Value Dot H y veamos, ¿esto

57
00:03:55,270 --> 00:03:56,530
‫es público ahora?

58
00:03:56,530 --> 00:03:59,830
‫Creo que esto va a estar protegido porque está en la sección predeterminada.

59
00:04:00,130 --> 00:04:05,170
‫Así que vamos a crearnos una sección protegida y pegarla allí y luego vamos a seguir adelante

60
00:04:05,170 --> 00:04:08,440
‫y crear la anulación solo para asegurarnos de estar seguros.

61
00:04:08,440 --> 00:04:14,440
‫Y luego vamos a crear una implementación en C++, recordando que siempre queremos llamar a super

62
00:04:14,440 --> 00:04:21,460
‫cuando estamos anulando, por lo que super ejecuta la tarea con el componente propietario y la memoria del nodo

63
00:04:21,460 --> 00:04:24,370
‫que se llama a nuestro padre aquí.

64
00:04:24,430 --> 00:04:30,640
‫Y entonces lo que queremos hacer es agarrar nuestra pizarra para poder borrar la llave.

65
00:04:30,730 --> 00:04:32,200
‫Y hay dos cosas que son importantes aquí.

66
00:04:32,200 --> 00:04:35,110
‫En primer lugar, ¿cómo sabemos qué clave se seleccionó?

67
00:04:35,110 --> 00:04:41,170
‫Bueno, si vamos a nuestra pizarra basada en H, puede ver que uno de los métodos allí es obtener la tecla

68
00:04:41,170 --> 00:04:42,280
‫de pizarra seleccionada.

69
00:04:42,280 --> 00:04:48,160
‫Entonces, puede llamar fácilmente a esto cualquier C ++, obtener la tecla de pizarra seleccionada y eso regresará.

70
00:04:48,160 --> 00:04:54,010
‫Si pasamos el cursor sobre él, devuelve un nombre F, el nombre F de la tecla de pizarra que se seleccionó en el árbol

71
00:04:54,040 --> 00:04:54,700
‫de comportamiento.

72
00:04:54,700 --> 00:04:59,380
‫Ahora, la otra cosa que debemos hacer es ser realmente capaces de obtener la pizarra relacionada con este

73
00:04:59,380 --> 00:05:00,250
‫árbol de comportamiento.

74
00:05:00,250 --> 00:05:02,110
‫Entonces, para eso, tenemos nuestro propio borrador.

75
00:05:02,500 --> 00:05:07,810
‫Ahora observe aquí que el tipo de borrador de propietario que se pasa aquí es en realidad una referencia, no un puntero.

76
00:05:08,110 --> 00:05:09,820
‫Así que no puede ser nulo para empezar.

77
00:05:09,820 --> 00:05:10,510
‫Genial.

78
00:05:10,810 --> 00:05:15,520
‫Pero también significa que necesitamos usar el operador PUNTO en lugar del operador en

79
00:05:15,520 --> 00:05:21,820
‫la flecha porque no estamos usando un puntero y desde aquí podemos simplemente obtener los componentes de la pizarra.

80
00:05:21,940 --> 00:05:24,360
‫Entonces eso solo obtiene el componente de pizarra si pasa el mouse sobre él.

81
00:05:24,370 --> 00:05:29,470
‫Este es un puntero a un componente de pizarra, por lo que deberá usar operadores de flecha.

82
00:05:29,470 --> 00:05:32,650
‫Entonces ya sabemos cómo borrar teclas en la pizarra.

83
00:05:33,240 --> 00:05:34,500
‫Ese va a ser tu desafío.

84
00:05:34,530 --> 00:05:36,660
‫Así que espero que el desafío no sea demasiado complicado.

85
00:05:36,670 --> 00:05:38,400
‫Quiere borrar la clave seleccionada.

86
00:05:38,740 --> 00:05:41,520
‫Podemos comprobar dónde hemos hecho esto antes.

87
00:05:42,210 --> 00:05:44,850
‫¿Necesita algún incluye para hacer esto?

88
00:05:44,850 --> 00:05:47,070
‫Tal vez la pizarra lo necesite.

89
00:05:47,070 --> 00:05:53,500
‫Incluya el uso de la clave seleccionada en su árbol de comportamiento como la clave que queremos borrar.

90
00:05:53,520 --> 00:05:55,320
‫Así que pausa el video y pruébalo.

91
00:05:55,530 --> 00:05:55,920
‫Bueno.

92
00:05:55,920 --> 00:05:56,460
‫Bienvenido de nuevo.

93
00:05:56,790 --> 00:05:58,720
‫Así que vamos a darle una oportunidad a esto.

94
00:05:58,740 --> 00:06:01,530
‫Así que lo primero es que tenemos nuestro componente de pizarra.

95
00:06:01,530 --> 00:06:03,000
‫Usemos el operador de flecha aquí.

96
00:06:03,330 --> 00:06:04,290
‫No surge nada.

97
00:06:04,590 --> 00:06:11,850
‫Así que asumo que necesito y, de hecho, hay algunos garabatos rojos que necesito que incluyan un hash aquí para hacer el

98
00:06:11,850 --> 00:06:15,930
‫árbol de comportamiento y luego el componente de pizarra aquí y ahora.

99
00:06:15,930 --> 00:06:21,240
‫Con suerte, mi autocompletado debería estar funcionando, lo que me permitirá tener la claridad.

100
00:06:21,240 --> 00:06:23,550
‫Tratemos de refrescar nuestros recuerdos.

101
00:06:23,550 --> 00:06:25,150
‫¿Dónde hemos hecho esto antes?

102
00:06:25,170 --> 00:06:30,120
‫Si vamos a disparar, controlo A y miro lo que tenemos aquí.

103
00:06:30,120 --> 00:06:31,440
‫Tenemos un valor claro.

104
00:06:31,440 --> 00:06:32,730
‫Ese es el que estamos buscando.

105
00:06:32,730 --> 00:06:35,400
‫Así que probemos ese valor claro.

106
00:06:35,400 --> 00:06:36,510
‫¿Y qué toma?

107
00:06:36,510 --> 00:06:41,100
‫Toma una tecla F o un nombre F, gran nombre f que podemos obtener.

108
00:06:41,490 --> 00:06:46,800
‫¿Y dónde dijimos que podíamos obtener eso con la tecla de pizarra seleccionada que está en esta clase porque está

109
00:06:46,800 --> 00:06:48,000
‫en la clase principal?

110
00:06:48,000 --> 00:06:53,550
‫Así que selecciona la tecla Blackboard Tan simple como eso, estamos borrando el valor de la tecla Blackboard

111
00:06:53,550 --> 00:06:53,880
‫seleccionada.

112
00:06:53,910 --> 00:06:55,530
‫Ahora, una última cosa que tenemos que hacer.

113
00:06:55,530 --> 00:06:57,030
‫Esto no era parte del desafío, así que no te preocupes.

114
00:06:57,030 --> 00:07:03,150
‫Si no sabía, esto es que debemos regresar porque hay un valor de retorno para la tarea de ejecución de valor

115
00:07:03,180 --> 00:07:06,780
‫de pizarra clara y el valor de retorno es bastante interesante.

116
00:07:06,780 --> 00:07:07,350
‫Echemos un vistazo.

117
00:07:07,350 --> 00:07:12,570
‫Sigámoslo con un F12 y veamos qué estados diferentes podemos devolver de nuestra prueba de ejecución.

118
00:07:12,600 --> 00:07:14,370
‫Ahora el primero es exitoso.

119
00:07:14,380 --> 00:07:14,700
‫Estupendo.

120
00:07:14,700 --> 00:07:19,470
‫Básicamente, eso le indica al árbol de comportamiento que esta nota ha terminado de ejecutarse y podemos pasar

121
00:07:19,800 --> 00:07:20,790
‫a la siguiente.

122
00:07:20,820 --> 00:07:21,870
‫Falló otra vez.

123
00:07:21,870 --> 00:07:27,420
‫Este está terminado, así que podemos pasar al siguiente, pero esta vez dice que falló.

124
00:07:27,420 --> 00:07:34,230
‫Eso da las diferentes indicaciones a, por ejemplo, nuestros nodos de secuencia o nuestros nodos seleccionados en cuanto a lo que

125
00:07:34,230 --> 00:07:36,510
‫esos nodos realmente deberían estar haciendo.

126
00:07:37,320 --> 00:07:44,610
‫Entonces tenemos abortado, que es básicamente lo mismo que fallar y tenemos en progreso.

127
00:07:44,970 --> 00:07:51,330
‫Si regresa en progreso de una tarea de ejecución, básicamente dirá que debe seguir llamando a tick hasta que

128
00:07:51,360 --> 00:07:57,090
‫le diga lo contrario, hasta que diga que he terminado, ahora no vamos a usar esto.

129
00:07:57,090 --> 00:08:02,670
‫Pero es bueno tener en cuenta que si necesita crear una tarea que dura mucho tiempo y se

130
00:08:02,670 --> 00:08:06,030
‫ejecutará en varios pasos, entonces tendremos que regresar en progreso.

131
00:08:06,030 --> 00:08:07,980
‫Pero como dije, queremos tener éxito.

132
00:08:08,520 --> 00:08:10,200
‫Así que entremos y hagamos eso.

133
00:08:10,200 --> 00:08:12,450
‫Devuelve el resultado del nodo vacío.

134
00:08:13,470 --> 00:08:14,280
‫Colon.

135
00:08:14,580 --> 00:08:20,280
‫Y va a tener éxito porque logramos despejar ese valor básicamente sin importar qué.

136
00:08:20,880 --> 00:08:25,440
‫Entonces podemos continuar y guardar todo esto, ir al editor y presionar compilar.

137
00:08:25,440 --> 00:08:31,470
‫Y cuando esté completo, avancemos y abramos nuestra IA y el árbol de comportamiento.

138
00:08:31,710 --> 00:08:33,300
‫Entonces, ¿ese Beattie es enemigo?

139
00:08:33,450 --> 00:08:35,460
‫Lo coloco en la ventana principal y echemos un vistazo.

140
00:08:35,460 --> 00:08:36,600
‫Tenemos una pizarra clara.

141
00:08:36,600 --> 00:08:42,060
‫El valor ahora debería poder permitirnos movernos a la última ubicación conocida, borrar el valor de la

142
00:08:42,060 --> 00:08:48,840
‫pizarra, esperar cinco y luego deberíamos ver que la investigación de esta última ubicación de juego conocida debería estar desactivada, por

143
00:08:48,840 --> 00:08:52,170
‫lo que deberíamos regresar a nuestra ubicación de inicio. .

144
00:08:52,170 --> 00:08:56,760
‫Entonces, veamos si este comportamiento ahora funciona ahora que la tarea se implementa por completo.

145
00:08:56,760 --> 00:09:00,120
‫Así que viene hacia mí, me está investigando.

146
00:09:00,570 --> 00:09:01,620
‫Voy a ir y esconderme.

147
00:09:01,770 --> 00:09:02,340
‫Así que entremos.

148
00:09:02,340 --> 00:09:04,170
‫Hides viene a investigar.

149
00:09:04,170 --> 00:09:05,310
‫Vamos a escondernos de nuevo.

150
00:09:05,850 --> 00:09:06,990
‫Así que ve y escóndete.

151
00:09:07,770 --> 00:09:09,810
‫A ver si podemos localizarlo por allí.

152
00:09:10,170 --> 00:09:15,870
‫Debería estar esperando en este momento y luego regresará a su lugar de inicio, lo que

153
00:09:16,050 --> 00:09:18,270
‫desafortunadamente hace que se cruce conmigo.

154
00:09:18,510 --> 00:09:25,350
‫Entonces, veamos si esto realmente funciona como esperamos al sacar a nuestro enemigo por la ventana y acoplarlo

155
00:09:25,380 --> 00:09:29,790
‫a la derecha y colocar nuestra ventana principal a la izquierda.

156
00:09:29,790 --> 00:09:34,830
‫Es un poco estrecho, pero podemos arreglárnoslas y luego vamos a tratar de escapar de este tipo una

157
00:09:34,830 --> 00:09:37,770
‫vez más y ver qué sucede con su comportamiento.

158
00:09:37,770 --> 00:09:41,670
‫Puede ver que se está moviendo a la última ubicación de juego conocida.

159
00:09:42,540 --> 00:09:45,810
‫Y ahora está esperando, habiendo despejado el valle.

160
00:09:46,050 --> 00:09:47,910
‫Y luego puedes ver que él también se va a mover.

161
00:09:47,910 --> 00:09:53,010
‫Y pueden ver que estas barras rojas en los decoradores nos dicen que ninguna de estas dos condiciones

162
00:09:53,310 --> 00:09:53,970
‫es cierta.

163
00:09:53,970 --> 00:09:57,660
‫Por lo tanto, no puede hacer que ninguno de los dos se mueva finalmente a la ubicación de inicio.

164
00:09:57,930 --> 00:10:00,930
‫Así que ahora está parpadeando porque básicamente no puede hacer nada.

165
00:10:01,440 --> 00:10:09,780
‫Básicamente, esta lección es que hemos visto cómo podemos hacer que las tareas de ritmo ejecuten

166
00:10:09,780 --> 00:10:14,730
‫el código. Comprendió los diferentes estados que puede devolver desde

167
00:10:15,000 --> 00:10:19,710
‫la tarea de ejecución. una tarea de pizarra.

168
00:10:19,830 --> 00:10:26,280
‫En la próxima lección, vamos a ver cómo podemos controlar el mundo fuera del árbol de comportamiento de la pizarra, cómo

169
00:10:26,280 --> 00:10:30,390
‫podemos controlar el peón desde dentro de una tarea de árbol de comportamiento.

170
00:10:30,420 --> 00:10:31,020
‫Veré eso.

