Por lo que entiendo en los árboles de comportamiento, cada comportamiento debe ser una acción orientada a objetivos cortos que se pueda realizar en unas pocas iteraciones.
Entonces, por ejemplo, a continuación se muestra una imagen de un Árbol de comportamiento:
Ahora supongamos que el comportamiento Drive To Enemy requiere más de unas pocas iteraciones en el árbol. Entonces, en cada pase, se llama Drive To Enemy porque ahora está en estado de ejecución .
El problema es que quiero llamar a Evade Enemy si hay un Enemy cerca. Y teniendo en cuenta que Drive To Enemy siempre se llama, nunca tengo la oportunidad de llamar a Evade Enemy ( probablemente debería llamarse Evitar enemigo ).
- ¿Debo atravesar el árbol CADA pase sin importar qué acción se esté ejecutando actualmente?
- ¿Voy por esto de la manera correcta?
- ¿Cuál es la forma correcta de manejar tal comportamiento?
Originalmente preguntado en Stackoverflow. Pensé que aquí sería un lugar más apropiado para hacer esta pregunta.
Respuestas:
Vea la imagen que proporcioné en mi respuesta anterior :
Si imagina que el nodo 1 es 'Evadir enemigo' y el nodo 2 es 'Chase Enemy', verá que aunque en la segunda iteración (cuando todo es verde excepto '2' y 'B' es cuando la segunda iteración comienza), 'Evade al enemigo' todavía se verifica primero. Solo cuando 'Evadir enemigo' falla, porque no hay enemigos cerca, se vuelve a activar 'Chase Enemy'. Cuando se vuelve a visitar 'Chase Enemy', se da cuenta de que está en el estado 'en ejecución' y pasa directamente a 'B'.
Esto significa que cada vez que se marca el árbol, siempre se desplazará de izquierda a derecha. Incluso cuando un nodo está marcado como en ejecución, los nodos de mayor prioridad aún se verifican primero.
No estoy seguro de si tiene la intención de procesar sus nodos de derecha a izquierda, pero así es como parece tenerlos organizados (es decir, bajo evadir enemigo, ubicar al enemigo está a la derecha de la unidad en dirección opuesta). Si necesita más explicaciones, debe preguntar en el chat o en una de sus preguntas existentes sobre el tema.
fuente