‫Hola y bienvenido.
‫En esta conferencia, obtuvimos una A. YO. que nos sigue por todo el mundo.
‫Iremos a investigar cuando me pierda de vista.
‫Así que es bastante difícil de perder.
‫Pero si me alejo demasiado en las curvas, no podrá seguir el ritmo y
‫eventualmente perderá interés y regresará a su lugar de inicio allí.
‫Eso es lo que vamos a implementar en esta lección al terminar nuestra tarea de árbol de comportamiento.
‫Vamos a sumergirnos y ver cómo se hace.
‫Así que queremos que nuestra tarea se ejecute, que realmente haga algo.
‫Y particularmente queríamos poder limpiar ese Blackboard Valley, hacer lo que dice en la lata.
‫Entonces, ¿cómo vamos a hacer eso?
‫Bueno, para eso, tenemos que subir a nuestra clase base y echar un vistazo a lo que está implementado allí.
‫De hecho, necesitamos subir un nivel más, lo cual, como puede ver en la herencia de
‫la tarea optimista Blackboard Base.
‫Por encima de eso, tenemos el nodo de tareas UBC.
‫Así que usemos F12 para navegar a la implementación allí.
‫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
‫sobre esta clase.
‫Y lo más importante es que estas son las funciones virtuales que es más probable
‫que queramos implementar.
‫Entonces, el primero es ejecutar la tarea.
‫Esto se llama cuando la tarea comienza a ejecutarse.
‫Luego tenemos una tarea de tablero, que es cuando se decide que debemos dejar de ejecutar, por ejemplo,
‫porque una condición se ha vuelto falsa y tenemos configurada esa señalización.
‫Entonces aborta esta tarea.
‫La tarea de marca ocurre todo el tiempo que la tarea se está ejecutando, pero no la primera marca.
‫Entonces, la primera tarea llamará a la tarea de ejecución y luego seguirá llamando a una tarea de verificación cada vez.
‫Y eso es para comportamientos que pueden durar más de un tic, como moverse hacia un enemigo que puede
‫tomar varios tics.
‫Así que marcar la tarea nos permite hacer algo.
‫Cada mensaje de marca y activación es para otras cosas además de cancelar que podrían enviar un mensaje a esta
‫tarea.
‫Realmente no tenemos que preocuparnos por esta función en particular.
‫Así que los primeros tres están listos.
‫Los que estaban más interesados y viendo que nuestra tarea simplemente va a borrar el valor de
‫la pizarra tan pronto como se ejecute y luego terminará de inmediato.
‫No necesita hacer cosas a través de múltiples ticks.
‫Estamos interesados en la tarea de ejecución.
‫Entonces, si buscamos en este encabezado de archivo para ejecutar la tarea, puede ver que la firma completa está aquí y
‫el tipo de retorno aquí es este resultado de nodo IBT.
‫Y toma en dos cosas el componente propietario y la memoria del nodo.
‫Ahora, la razón por la que ocupa la memoria del nodo es un poco
‫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.
‫Esencialmente, se comparten entre todo, por lo que si desea guardar información relacionada con
‫un nodo en un árbol de comportamiento particular, lo que debe hacer es almacenarla en este puntero
‫de memoria.
‫Pero no vamos a hacer nada relacionado con eso.
‫Es un poco más avanzado necesitar hacer eso.
‫Y hay otras formas de evitar esto, como permitir que Unreal cree múltiples instancias para cada árbol de comportamiento, lo
‫que puede ser un poco ingenioso o no, pero esta es una forma un poco más eficiente
‫y no tenemos que preocuparnos por eso.
‫En última instancia, lo que nos interesa es el hecho de que podemos llegar a nuestro componente propietario, el componente del árbol de comportamiento,
‫y desde allí podemos llegar a otras cosas como el peón, etc. Pero ese es también el
‫tema de otra conferencia.
‫Entonces, lo que es interesante e importante ahora es solo implementar y ejecutar la tarea.
‫Así que vamos a copiar la firma, ir a Clear Blackboard Value Dot H y veamos, ¿esto
‫es público ahora?
‫Creo que esto va a estar protegido porque está en la sección predeterminada.
‫Así que vamos a crearnos una sección protegida y pegarla allí y luego vamos a seguir adelante
‫y crear la anulación solo para asegurarnos de estar seguros.
‫Y luego vamos a crear una implementación en C++, recordando que siempre queremos llamar a super
‫cuando estamos anulando, por lo que super ejecuta la tarea con el componente propietario y la memoria del nodo
‫que se llama a nuestro padre aquí.
‫Y entonces lo que queremos hacer es agarrar nuestra pizarra para poder borrar la llave.
‫Y hay dos cosas que son importantes aquí.
‫En primer lugar, ¿cómo sabemos qué clave se seleccionó?
‫Bueno, si vamos a nuestra pizarra basada en H, puede ver que uno de los métodos allí es obtener la tecla
‫de pizarra seleccionada.
‫Entonces, puede llamar fácilmente a esto cualquier C ++, obtener la tecla de pizarra seleccionada y eso regresará.
‫Si pasamos el cursor sobre él, devuelve un nombre F, el nombre F de la tecla de pizarra que se seleccionó en el árbol
‫de comportamiento.
‫Ahora, la otra cosa que debemos hacer es ser realmente capaces de obtener la pizarra relacionada con este
‫árbol de comportamiento.
‫Entonces, para eso, tenemos nuestro propio borrador.
‫Ahora observe aquí que el tipo de borrador de propietario que se pasa aquí es en realidad una referencia, no un puntero.
‫Así que no puede ser nulo para empezar.
‫Genial.
‫Pero también significa que necesitamos usar el operador PUNTO en lugar del operador en
‫la flecha porque no estamos usando un puntero y desde aquí podemos simplemente obtener los componentes de la pizarra.
‫Entonces eso solo obtiene el componente de pizarra si pasa el mouse sobre él.
‫Este es un puntero a un componente de pizarra, por lo que deberá usar operadores de flecha.
‫Entonces ya sabemos cómo borrar teclas en la pizarra.
‫Ese va a ser tu desafío.
‫Así que espero que el desafío no sea demasiado complicado.
‫Quiere borrar la clave seleccionada.
‫Podemos comprobar dónde hemos hecho esto antes.
‫¿Necesita algún incluye para hacer esto?
‫Tal vez la pizarra lo necesite.
‫Incluya el uso de la clave seleccionada en su árbol de comportamiento como la clave que queremos borrar.
‫Así que pausa el video y pruébalo.
‫Bueno.
‫Bienvenido de nuevo.
‫Así que vamos a darle una oportunidad a esto.
‫Así que lo primero es que tenemos nuestro componente de pizarra.
‫Usemos el operador de flecha aquí.
‫No surge nada.
‫Así que asumo que necesito y, de hecho, hay algunos garabatos rojos que necesito que incluyan un hash aquí para hacer el
‫árbol de comportamiento y luego el componente de pizarra aquí y ahora.
‫Con suerte, mi autocompletado debería estar funcionando, lo que me permitirá tener la claridad.
‫Tratemos de refrescar nuestros recuerdos.
‫¿Dónde hemos hecho esto antes?
‫Si vamos a disparar, controlo A y miro lo que tenemos aquí.
‫Tenemos un valor claro.
‫Ese es el que estamos buscando.
‫Así que probemos ese valor claro.
‫¿Y qué toma?
‫Toma una tecla F o un nombre F, gran nombre f que podemos obtener.
‫¿Y dónde dijimos que podíamos obtener eso con la tecla de pizarra seleccionada que está en esta clase porque está
‫en la clase principal?
‫Así que selecciona la tecla Blackboard Tan simple como eso, estamos borrando el valor de la tecla Blackboard
‫seleccionada.
‫Ahora, una última cosa que tenemos que hacer.
‫Esto no era parte del desafío, así que no te preocupes.
‫Si no sabía, esto es que debemos regresar porque hay un valor de retorno para la tarea de ejecución de valor
‫de pizarra clara y el valor de retorno es bastante interesante.
‫Echemos un vistazo.
‫Sigámoslo con un F12 y veamos qué estados diferentes podemos devolver de nuestra prueba de ejecución.
‫Ahora el primero es exitoso.
‫Estupendo.
‫Básicamente, eso le indica al árbol de comportamiento que esta nota ha terminado de ejecutarse y podemos pasar
‫a la siguiente.
‫Falló otra vez.
‫Este está terminado, así que podemos pasar al siguiente, pero esta vez dice que falló.
‫Eso da las diferentes indicaciones a, por ejemplo, nuestros nodos de secuencia o nuestros nodos seleccionados en cuanto a lo que
‫esos nodos realmente deberían estar haciendo.
‫Entonces tenemos abortado, que es básicamente lo mismo que fallar y tenemos en progreso.
‫Si regresa en progreso de una tarea de ejecución, básicamente dirá que debe seguir llamando a tick hasta que
‫le diga lo contrario, hasta que diga que he terminado, ahora no vamos a usar esto.
‫Pero es bueno tener en cuenta que si necesita crear una tarea que dura mucho tiempo y se
‫ejecutará en varios pasos, entonces tendremos que regresar en progreso.
‫Pero como dije, queremos tener éxito.
‫Así que entremos y hagamos eso.
‫Devuelve el resultado del nodo vacío.
‫Colon.
‫Y va a tener éxito porque logramos despejar ese valor básicamente sin importar qué.
‫Entonces podemos continuar y guardar todo esto, ir al editor y presionar compilar.
‫Y cuando esté completo, avancemos y abramos nuestra IA y el árbol de comportamiento.
‫Entonces, ¿ese Beattie es enemigo?
‫Lo coloco en la ventana principal y echemos un vistazo.
‫Tenemos una pizarra clara.
‫El valor ahora debería poder permitirnos movernos a la última ubicación conocida, borrar el valor de la
‫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
‫lo que deberíamos regresar a nuestra ubicación de inicio. .
‫Entonces, veamos si este comportamiento ahora funciona ahora que la tarea se implementa por completo.
‫Así que viene hacia mí, me está investigando.
‫Voy a ir y esconderme.
‫Así que entremos.
‫Hides viene a investigar.
‫Vamos a escondernos de nuevo.
‫Así que ve y escóndete.
‫A ver si podemos localizarlo por allí.
‫Debería estar esperando en este momento y luego regresará a su lugar de inicio, lo que
‫desafortunadamente hace que se cruce conmigo.
‫Entonces, veamos si esto realmente funciona como esperamos al sacar a nuestro enemigo por la ventana y acoplarlo
‫a la derecha y colocar nuestra ventana principal a la izquierda.
‫Es un poco estrecho, pero podemos arreglárnoslas y luego vamos a tratar de escapar de este tipo una
‫vez más y ver qué sucede con su comportamiento.
‫Puede ver que se está moviendo a la última ubicación de juego conocida.
‫Y ahora está esperando, habiendo despejado el valle.
‫Y luego puedes ver que él también se va a mover.
‫Y pueden ver que estas barras rojas en los decoradores nos dicen que ninguna de estas dos condiciones
‫es cierta.
‫Por lo tanto, no puede hacer que ninguno de los dos se mueva finalmente a la ubicación de inicio.
‫Así que ahora está parpadeando porque básicamente no puede hacer nada.
‫Básicamente, esta lección es que hemos visto cómo podemos hacer que las tareas de ritmo ejecuten
‫el código. Comprendió los diferentes estados que puede devolver desde
‫la tarea de ejecución. una tarea de pizarra.
‫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
‫podemos controlar el peón desde dentro de una tarea de árbol de comportamiento.
‫Veré eso.