Comportamiento.
Los árboles son una técnica er utilizada para controlar el comportamiento de los NPC.
Se hicieron populares tras su uso para los NPC de Halo.
Se trata de un tipo especial de gráfico llamado árbol.
Como su nombre indica, su estructura comienza con una única raíz y se extiende a partir de ella añadiendo
ramas, nodos y finalmente nodos finales.
Hay tres tipos de nodos: compuesto, decorador y hoja.
Un nodo compuesto es aquel que puede tener uno o más nodos hijos.
Un nodo decorador sólo puede tener un hijo.
Un nodo hoja es un nodo al final de una rama y corresponde a una acción real en un juego.
Un grupo de nodos hoja al final de una rama puede representar una secuencia de acciones o un conjunto de acciones para seleccionar
su funcionamiento.
Depende del tipo de nodo compuesto del que hay dos tipos secuencias y selectores.
Cuando se procesa, un nodo de secuencia asegurará que cada hijo sea visitado en orden.
Un nodo selector, sin embargo, indica que sólo uno de sus hijos debe ser visitado y ese hijo puede
ser elegido al azar.
Veamos un ejemplo.
Imagina que tú o tu PNJ tenéis hambre.
Tienes que tomar una decisión sobre qué comer.
Esto podría mostrarse mediante un nodo selector en el que se puede seleccionar sólo uno de los hijos.
No los necesitas todos.
Así que aquí es cuando entra en juego un selector, cuando sólo se necesita ejecutar un nodo hoja para realizar el comportamiento
de comer.
Sin embargo, si las acciones de tu PNJ estuvieran a un nivel inferior a éste, como en Los Sims, entonces podrías
asociar la ingesta de cada elemento con un proceso bien definido.
En este caso, necesitarías un nodo de secuencia para simplificar.
Digamos que dicha secuencia incluye reunir los ingredientes, hacer la pizza, cocinar la pizza y comer la pizza.
Observe que cada nodo de la hoja corresponde a una acción real.
Es importante que los nodos de las hojas se puedan realizar con una lógica o con una animación porque
estas son las cosas reales que verás hacer al NPC en la pantalla.
También son autónomos.
Esto significa que se pueden realizar y luego abandonar la secuencia.
Los nodos también pueden representar decisiones que, cuando están en una secuencia, pueden hacer que ésta continúe o fracase.
En este caso, el árbol de comportamiento se ejecutará completamente sólo si se satisface mi hambre y si tengo comida, en cuyo
caso se satisfará la decisión de comer, hamburguesa o comer pizza.
Los árboles de comportamiento pueden ser tan simples o tan complejos como se necesite, incluyendo acciones en todos los niveles, unidas
por diferentes nodos compuestos.
¿Cómo funciona todo esto en código?
Pues bien, cada nodo hoja debe tener un método coincidente que pueda ser ejecutado.
El propio árbol de comportamiento es una especie de lenguaje de scripting.
Situado por encima de su base de código, debe escribir un montón de módulos autocontenidos en un archivo C-sharp que puede
ser llamado cuando un nodo de la hoja se está ejecutando.
El propio método tendrá que informar de si ha fallado o ha tenido éxito.
Esto da al nodo hoja un estado de fallo o de éxito, que se comunica al funcionamiento del árbol de comportamiento.
En el caso de una secuencia, esto es esencial.
Como si una hoja falla, toda la secuencia falla.
En esta sección vamos a construir el esqueleto básico de un sistema de árbol de comportamiento
para que puedas ver cómo va a ser todo el código principal y montar tu propia pequeña simulación.
Así que de la misma manera que hice en la serie Hope, la planificación de acciones orientadas a objetivos, he creado otro
pequeño escenario aquí, y este escenario tiene un agente en una malla de navegación de nuevo que he construido.
El agente en este caso es un ladrón, y va a ir a robar algo de la pequeña galería
que he creado aquí.
Ahora, si traes este proyecto de datos que se adjunta a esta conferencia y lo abres en unity,
vas a encontrar esto en la escena del árbol de abejas.
La malla de navegación ya estará construida.
Ahora hay dos objetos de la puerta aquí.
En realidad no forman parte de la malla naval, pero los convertiremos en obstáculos de la malla naval un poco más tarde.
Así que esto ya está configurado y listo para que lo uses.
Así que cuando volvamos en la próxima clase, empezaremos a escribir algo de código para que nuestro
ladrón se mueva por la galería.