Estructuras de nodos de IA: Nodos Selector, Sequence (Secuencia) y Decorator en árboles de comportamiento
Investigación

Estructuras de nodos de IA: Nodos Selector, Sequence (Secuencia) y Decorator en árboles de comportamiento

AutorGameDev Base
Fecha20 de octubre de 2026
22 min de lectura

Árboles de Comportamiento de Inteligencia Artificial en el Desarrollo de Juegos: Análisis Exhaustivo de los Nodos Selectores, Secuenciales y Decoradores en el Marco de Unreal Engine 5 y Unity

La evolución de los sistemas de inteligencia artificial en los videojuegos refleja un profundo cambio de paradigma que avanza desde conjuntos de reglas puramente deterministas hacia mecanismos de decisión dinámicos, modulares y sensibles al contexto. En el centro de esta evolución se encuentran los modelos de planificación matemática y lógica conocidos como "Árboles de Comportamiento" (Behavior Trees - BT). Desarrollados originalmente para la robótica y los sistemas de control, inspirados específicamente en la arquitectura del sistema de control por capas de Rodney Brooks, estas estructuras han demostrado su valía en la industria del juego con proyectos de alto perfil como Halo, Bioshock y Spore. 1 Hoy en día, constituyen los bloques de construcción fundamentales de la inteligencia artificial en los motores de juegos modernos como Unreal Engine 5 y Unity. Este informe examina de manera exhaustiva los nodos Selector, Secuencial (Sequence) y Decorador (Decorator), que forman la columna vertebral básica de los árboles de comportamiento; la lógica teórica detrás de estos nodos, sus ventajas frente a las Máquinas de Estados Finitos (FSM), sus mecanismos de funcionamiento matemático y sus implementaciones específicas en las arquitecturas de los motores modernos.

Fundamentos Teóricos y Matemáticos de los Árboles de Comportamiento

Los árboles de comportamiento son modelos de árboles matemáticos dirigidos y jerárquicos que simulan la ejecución de planes en informática, robótica y videojuegos. 1 Diseñados sobre una estructura de árbol jerárquico, este modelo tiene un flujo de ejecución que comienza desde el nodo raíz (root) y avanza desde los nodos internos (nodos compuestos) hasta los nodos hoja (leaf/task). 3 La característica arquitectónica más fundamental del sistema es que cada nodo realiza una operación lógica específica cuando le llega su turno de procesamiento (tick) y luego devuelve un estado de operación determinado (status) al nodo padre que lo llamó. 3 Estos estados devueltos se clasifican universalmente en tres categorías principales:

  1. Éxito (Success): Indica que el nodo ha cumplido y completado su tarea definida o control lógico sin errores. 3

  2. Fracaso (Failure): Especifica que el nodo no ha podido cumplir con su tarea definida, ha encontrado un obstáculo o no se cumple la condición. 3

  3. Ejecutándose (Running): Expresa que la tarea aún no ha concluido, continúa y debe evaluarse nuevamente en el siguiente ciclo de procesamiento (tick). 3

A diferencia de los Árboles de Decisión (Decision Trees) tradicionales y los bloques simples de if-else, la existencia del estado "Ejecutándose" (Running) permite que los árboles de comportamiento ejecuten acciones de forma continua durante más tiempo que un solo ciclo de procesamiento (frame/tick) y dota al sistema de una estructura reactiva que lo protege de los bloqueos. 5 En el desarrollo de juegos, que un agente de inteligencia artificial vaya del punto A al punto B suele llevar segundos; durante este proceso, el nodo hoja que se está ejecutando continuamente devuelve el estado "Ejecutándose" para garantizar que los nodos padres permanezcan en espera (Waiting). 4 Este funcionamiento asíncrono evita la saturación del hilo de procesamiento principal del motor.

Comparación de Paradigmas: Máquinas de Estados Finitos (FSM) y Árboles de Comportamiento (BT)

La razón principal por la cual los árboles de comportamiento se han convertido en el estándar de la industria del juego es que resuelven los callejones sin salida arquitectónicos que traen las Máquinas de Estados Finitos (Finite State Machines - FSM). Una FSM gestiona las transiciones (Transitions) mutuas de cada estado (State) a través de un gráfico de adyacencia (adjacency graph) predefinido. 2 Las FSM, que son fáciles de construir y funcionan perfectamente cuando hay pocos estados, se transforman en un caos ingobernable de "Código Espagueti" debido al aumento exponencial de las combinaciones de transiciones a medida que crece el número de estados. 7 Por el contrario, los árboles de comportamiento construyen acciones muy complejas mediante la combinación de tareas simples (composición) gracias a sus estructuras jerárquicas. 1 La forma en que se implementan las subtareas funciona como una caja negra (black box) para los nodos superiores. 1 Gracias a sus estructuras reactivas, ante cualquier estímulo externo o cambio de estado de alta prioridad, el árbol puede reevaluarse a sí mismo desde la raíz o a través de oyentes de eventos específicos (observers), cancelando las acciones actuales y activando la nueva rama adecuada para la situación. 5 Mientras que en las FSM las transiciones deben codificarse dentro de los propios estados o en una clase administradora separada, en los árboles de comportamiento el flujo de control y la ejecución de acciones están completamente desacoplados. 2

Métrica de Análisis

Árboles de Comportamiento (Behavior Trees)

Máquinas de Estados Finitos (FSM / HFSM)

Estructura Arquitectónica

Jerárquica, basada en relaciones padre/hijo (parent/child), con flujo de arriba hacia abajo.

Gráfico de adyacencia (adjacency graph) y transiciones de bordes entre nodos.

Escalabilidad

Alta modularidad; los subárboles se pueden probar de forma independiente, la complejidad aumenta linealmente a medida que crece el gráfico.

A medida que aumenta la complejidad, la gestión de transiciones se vuelve exponencialmente difícil ( riesgo).

Lógica de Ejecución

Basada en tareas (Task-based). Los nodos se evalúan dinámicamente de arriba a abajo en cada tic o evento.

Basada en estados (State-based). Un estado activo permanece estático hasta que se cumple una condición de transición específica.

Reactividad

Dispone de mecanismos de cancelación inmediata (abort) y redirección para tareas de alta prioridad.

Requiere reglas explícitas (explicit), funciones de salida y entrada para pasar del estado actual a uno nuevo.

Gestión de Memoria

Las decisiones pasadas no se almacenan en forma de árbol, el sistema opera cada vez desde la raíz o el nodo actual (Reactividad sin memoria).

Las acciones y decisiones pasadas crean una memoria (memory) explícita sobre el estado actual (Alto poder de expresión).

Tabla 1: Comparación estructural, algorítmica y operacional de los Árboles de Comportamiento y las Máquinas de Estados Finitos en los sistemas de inteligencia artificial. Esta tabla resume las diferencias arquitectónicas y los escenarios de uso de ambos paradigmas. 1

Los investigadores han demostrado que, al comparar los BT con los Árboles de Decisión, los Programas Teleo-reactivos y las FSM, las FSM son más "expresivas" (expressive) ya que pueden construir estados con acceso a variables internas y decisiones pasadas, mientras que los BT son mucho más "reactivos" (reactive) y legibles, ya que inician la ejecución desde la raíz (o la interrumpen con eventos) ante cada nueva entrada o tic. 5 Los desarrolladores de juegos han compensado esta falta de memoria respaldando esta estructura sin memoria pero de respuesta inmediata de los BT con unidades de almacenamiento de datos llamadas Pizarras (Blackboard), logrando una separación perfecta entre datos y lógica híbrida. 12

El Epicentro del Control de Flujo: Nodos Compuestos (Composite Nodes)

El corazón del mecanismo de decisión y del flujo lógico en los árboles de comportamiento está formado por los "Nodos Compuestos" (Composite Nodes). Un nodo compuesto es una estructura de esqueleto principal que puede tener uno o más nodos hijo (child) conectados a él y determina en qué orden, con qué reglas de prioridad o según qué condiciones lógicas se ejecutarán estos hijos. 3 La geometría del flujo se realiza universalmente de arriba hacia abajo (de padre a hijo) y de izquierda a derecha (de la rama prioritaria a la secundaria). 10 Los dos modelos de nodos compuestos más básicos e indispensables del sistema son los nodos Secuenciales (Sequence) y Selectores (Selector). 3

Nodo Secuencial (Sequence Node): Flujo Lógico "Y" (AND)

El nodo secuencial es el componente que ejecuta los subnodos conectados a él de forma consecutiva y en una serie estricta de reglas, comenzando desde el hijo situado más a la izquierda hacia la derecha. Debido a su lógica de funcionamiento, un nodo secuencial puede modelarse como una puerta lógica "Y" (AND) en una arquitectura de programación. 3 Para que se considere que el nodo ha completado su tarea con éxito, cada nodo hijo de la cadena debe ejecutarse y devolver un estado de "Éxito" (Success) sin excepción. 3 Si en cualquier punto de la cadena un nodo hijo devuelve un "Fracaso" (Failure), el nodo secuencial detiene la ejecución inmediatamente en ese punto, renuncia a ejecutar los demás hijos que quedan a la derecha y transmite un estado de "Fracaso" a su propio padre. 3

Mientras uno de los nodos hijo devuelva un estado de "Ejecutándose" (Running) durante la ejecución, el nodo secuencial detiene el avance y continúa transmitiendo el estado "Ejecutándose" a su propio padre. 3 En el siguiente tic del sistema, el nodo secuencial continúa la ejecución desde ese nodo hijo que ya está en funcionamiento; no empieza desde el principio.

Matemáticamente, el estado de un nodo secuencial S, siendo los estados de los nodos hijo respectivamente, se puede expresar con la siguiente ecuación:

En los procesos de desarrollo de juegos, el Nodo Secuencial es una herramienta excelente para modelar un conjunto de acciones complejas que dependen absolutamente unas de otras y deben ocurrir en un orden cronológico. Al considerar una acción clásica de "Abrir Puerta"; la acción de que una inteligencia artificial abra una puerta se puede agrupar bajo una rama Sequence compuesta por tres nodos hoja separados: "Caminar hacia la Puerta", "Desbloquear la Puerta" y "Girar el Pompo de la Puerta y Empujar", en ese orden. 10 Si el personaje no puede encontrar su camino en el primer paso y no puede ir al lado de la puerta (error de navegación - Failure), toda la secuencia de acciones termina en fracaso. Dado que no tendría sentido que el sistema ejecute el comando "Desbloquear" cuando el personaje no está al lado de la puerta, el Nodo Secuencial detecta este error al instante, rompe la cadena y ahorra ciclos de la unidad central de procesamiento (CPU). 13 De manera similar, una rama Sequence configurada para que un agente enemigo ataque al jugador se diseña como: "Avanzar hacia el Jugador", "Comprobar si está en el Rango", "Girarse hacia el Jugador" y "Reproducir la Animación de Ataque". Si la comprobación de rango falla, las acciones de rotación y ataque nunca se ejecutan. 14

Nodo Selector (Selector / Fallback Node): Flujo Lógico "O" (OR)

El nodo selector (conocido como Fallback en algunos motores), con una filosofía totalmente opuesta al nodo Secuencial, funciona como un solucionador de problemas flexible y una puerta lógica "O" (OR). 3 Este nodo prueba los nodos hijo debajo de él nuevamente en una jerarquía de izquierda a derecha, pero en el momento en que un nodo hijo tiene "Éxito" (Success), detiene la evaluación de otras alternativas y devuelve inmediatamente "Éxito" (Success) a su padre. 3 Para que un nodo selector se considere fallido, todos los nodos hijo debajo de él deben probarse sin excepción y todos deben ser un "Fracaso" (Failure) a la vez. 3

Al igual que en el nodo secuencial, si un hijo en ejecución devuelve "Ejecutándose", el nodo selector también se suspende y refleja el estado "Ejecutándose" a su padre.

Su definición matemática es la siguiente:

En el diseño de juegos, esta estructura se utiliza para garantizar que la inteligencia artificial pruebe diferentes rutas, tácticas o reacciones priorizadas para lograr un único propósito u objetivo general. Dado que el lado izquierdo siempre representa la más alta prioridad, en la práctica de diseño, la acción preferida, de menor coste u óptima se coloca más a la izquierda, mientras que a medida que se avanza hacia la derecha se ofrecen soluciones alternativas, más costosas y menos ideales. 3 Esto crea una fuerte estratificación de prioridades (priority) en la arquitectura del árbol. 3

Para ilustrar esto, ampliemos el escenario de apertura de puertas: el personaje necesita cruzar al otro lado de la puerta. Bajo un nodo Selector, se pueden secuenciar tres acciones o subárboles diferentes (Sequence). En el extremo izquierdo está "Usar Llave", en el medio "Forzar la Cerradura" (más lento) y en el extremo derecho "Romper la Puerta para Abrirla" (ruidoso y peligroso). 10 Si el agente tiene la llave en su inventario, se prueba la primera acción y tiene éxito. El nodo selector cancela todas las demás operaciones y se cruza la puerta. Sin embargo, si el agente no tiene la llave (Failure), el nodo selector no se rinde e inmediatamente pasa a la opción "Usar Ganzúa" a la derecha. Si eso también falla, intenta romper la puerta como último recurso. Si las tres acciones fallan (por ejemplo, si la puerta es de acero irrompible), recién entonces el nodo selector informa a su padre que se han agotado todas las alternativas (Failure). 10 Esta arquitectura basada en prioridades tipo O refleja el verdadero poder de los nodos selectores para generar comportamientos de inteligencia

artificial extremadamente sofisticados y de aspecto natural.

Manipulación de la ejecución: Nodos decoradores

Mientras que los nodos compuestos organizan el orden y la lógica de ejecución de sus hijos, los nodos decoradores tienen la tarea de ajustar con precisión los mecanismos de control dentro del árbol. Esta estructura, que comparte el mismo nombre que el patrón de diseño "Decorator" en la ingeniería de software, a diferencia de los nodos compuestos, solo puede tener un único nodo hijo (o subárbol) y manipula las reglas de ejecución, los resultados devueltos o los mecanismos de bucle de este hijo envolviéndolos como una armadura externa.3 Los decoradores funcionan como barreras condicionales (Conditionals) o nodos de guardia (Guard Nodes) que deciden si una rama puede ejecutarse o no.15

Funciones básicas y escenarios de uso de los decoradores

El uso más común y vital de los decoradores en la inteligencia artificial de juegos son los controles de condición (Conditionals).4 Una rama del árbol de inteligencia artificial solo se vuelve accesible cuando se cumplen las condiciones definidas por el decorador. Por ejemplo, un decorador colocado al principio de una rama de "Ataque", cuyo objetivo es atacar al enemigo, verifica constantemente controles como "¿Está el enemigo en el campo de visión?" o "¿Está el arma cargada?".3 Si la condición no es válida, el decorador bloquea inmediatamente la ejecución de su hijo y devuelve directamente un estado de "Fallo" (Failure).4

Además de las condiciones, los decoradores también tienen variantes que modifican directamente los resultados del flujo o vinculan las acciones a una línea de tiempo específica 4:

  • Inverter (Inversor): Funciona como una puerta lógica "NO" (NOT). Si el nodo hijo falla, devuelve "Éxito" al padre; si el hijo tiene éxito, devuelve "Fallo".4 Se utiliza especialmente cuando se desea que no ocurra una situación determinada (Ej: "Patrullar si el enemigo no está cerca").

  • Succeeder (Éxito forzado): Independientemente del resultado del hijo, incluso si falla, devuelve forzosamente "Éxito" al nodo padre.4 Esto se utiliza dentro de una gran cadena de Sequence para evitar que una tarea opcional cuyo fallo no es importante (Ej: "Gritar al enemigo") rompa toda la cadena.18

  • Repeat (Bucle / Repetición): Permite que un nodo o rama determinado se repita consecutivamente un número específico de veces, para siempre o hasta que tenga éxito/falle.4

  • Cooldown y Time Out (Restricciones de tiempo): Cooldown coloca un tiempo de espera obligatorio entre dos ejecuciones consecutivas de una rama (Ej: Tiempos de recarga de habilidades). Time Out, por otro lado, permite cancelar una operación de larga duración (Running) forzando un fallo después de que haya transcurrido un número determinado de segundos.4

Unreal Engine 5: Arquitectura de árbol de comportamiento dirigida por eventos

Unreal Engine 5 (UE5) presenta su implementación de árbol de comportamiento, estándar en la industria, con modificaciones arquitectónicas únicas, de alto rendimiento y complejas. La más profunda e importante de estas modificaciones es que los árboles de comportamiento de UE5 funcionan sobre una arquitectura totalmente "dirigida por eventos" (Event-Driven).16 En los árboles de comportamiento clásicos, el sistema reevalúa continuamente todo el árbol desde la raíz hasta las hojas en cada fotograma (frame/tick) para probar la validez de las acciones. Este enfoque basado en "polling" impone una carga enorme al rendimiento del procesador (CPU) en un juego con cientos de enemigos.19

Según la documentación de Unreal Engine, los árboles de comportamiento dentro del motor funcionan en modo de escucha pasiva para evitar esta carga de procesamiento innecesaria. En lugar de comprobar las condiciones en cada fotograma, el sistema espera "eventos" activados por el cambio de variables en el Blackboard (Pizarra) y solo abre, cierra o reevalúa las ramas necesarias del árbol cuando cambia la variable correspondiente.16

Dentro de UE5, un perfil de inteligencia artificial se nutre básicamente de: el AI Controller que gestiona el cerebro de la IA, el Blackboard que es la base de datos que guarda la memoria y las variables, el Behavior Tree que traza la lógica de decisión, y los componentes Tasks que realizan las acciones, Decorators que filtran los estados y Services que actualizan los datos.12 El Blackboard (Pizarra) es una clase de datos que vive completamente independiente del árbol de comportamiento y almacena datos contextuales como los objetivos del personaje, la ubicación actual, los enemigos en el campo de visión o los puntos de patrulla.12 El árbol de comportamiento es solo un procesador de lógica; extrae los datos del Blackboard, toma la decisión y dispara la acción (Task).19

Nodos compuestos en UE5: Selector, Sequence y Simple Parallel

Mientras que el nodo "Selector" en la interfaz de UE5 se utiliza para realizar transiciones tácticas entre subárboles (subtrees), el nodo "Sequence" se utiliza para ejecutar una serie de subacciones en orden.12 UE5 utiliza el nodo "Simple Parallel" (Paralelo simple) para facilitar el uso y la estabilidad en lugar de los complejos nodos Parallel (Paralelos) que se encuentran en los sistemas tradicionales.14 El nodo de paralelo simple tiene exactamente dos conexiones: una "Tarea principal" (Main Task) y una "Rama de fondo" (Background Branch). La tarea principal siempre debe ser un nodo hoja (Task). Mientras el agente realiza su tarea principal (Ej: "Disparar al enemigo"), la rama de fondo funciona simultáneamente (Ej: "Moverse continuamente lejos del enemigo"). Se puede configurar desde los ajustes cómo reaccionará el nodo cuando termine la tarea principal o cuando termine el fondo.14

El corazón del sistema: Mecanismo de abortos del observador (Observer Aborts)

La característica más fundamental que hace que el sistema de árboles de comportamiento de Unreal Engine 5 sea inigualable y que hace que la IA dentro del juego se sienta "viva" es el mecanismo de "Abortos del observador" (Observer Aborts) integrado a nivel de hardware dentro de los decoradores.21 Un agente de IA no tiene que volver a la raíz del árbol y recorrer todas las ramas para evaluar una situación externa específica (por ejemplo, que el enemigo salga del campo de visión). En su lugar, los decoradores escuchan (observan) pasivamente la variable del Blackboard.17

La función Observer Aborts, que determina cómo el sistema cortará las ramas cuando cambien las condiciones, ofrece a los desarrolladores cuatro parámetros diferentes 22:

Modo de aborto del observador

Descripción funcional e impacto operativo

None (Ninguno)

No se realiza ninguna interrupción instantánea, incluso si se produce la escucha. El árbol evalúa la condición en su flujo normal cuando llega el turno jerárquico al decorador. La ocurrencia de un evento de alta prioridad no puede interrumpir una tarea de baja prioridad.

Self (Propio)

Cubre solo el nodo al que está conectado el decorador y el árbol debajo de ese nodo. Si la condición deja de ser válida repentinamente mientras la ejecución ya está dentro de esta rama (por ejemplo, si el enemigo sale del alcance mientras se está en la rama "Ataque"), la rama se cancela instantáneamente y el árbol informa del estado "Fallo" a la jerarquía superior.

Lower Priority (Baja prioridad)

El decorador observa las ramas con menor prioridad que él mismo (las que quedan a su derecha). Mientras el agente realiza una acción de baja prioridad a la derecha (Ej: Patrulla), cuando se cumple la condición de este decorador (Ej: Enemigo visto), el sistema cancela inmediatamente la tarea de patrulla de la derecha y mueve el flujo a la izquierda (dentro de esta rama).

Both (Ambos)

Es el modo más reactivo donde las funciones "Self" y "Lower Priority" trabajan simultáneamente. Tanto se cancela a sí mismo cuando la condición de la rama ejecutada actualmente se rompe, como cancela la baja prioridad y toma el control del flujo cuando se cumple su propia condición mientras está en una acción de baja prioridad.

Tabla 2: Funcionamiento sistemático y táctico de los parámetros de Observer Aborts de Unreal Engine 5.

Para explicarlo a través de un escenario de análisis; mientras el agente ejecuta el nodo secuencial "Patrullar" (baja prioridad, rama derecha), cuando el jugador entra en el campo de visión del agente, la clave "HasLineOfSight" (Tiene línea de visión) en el Blackboard se pone en posición "True" (Set). Si el decorador al principio de la rama "Perseguir" de la izquierda está configurado como "Lower Priority" o "Both", el sistema cancela instantáneamente el nodo Task de patrulla (incluso si está en medio de un largo proceso de navegación) y pasa la ejecución a la rama de alta prioridad "Perseguir".14 Esto es el equivalente en software a una señal de "interrupción" (hardware interrupt) de hardware en los sistemas operativos dentro de la IA del juego, y permite que la IA tome decisiones extremadamente reactivas e instantáneas. Si la condición se rompe de nuevo (el jugador se esconde) y el decorador está configurado como "Both" o "Self", la tarea "Perseguir" se corta instantáneamente y el sistema vuelve a la rutina de patrulla de la derecha.14 En situaciones donde varios decoradores intentan cancelar tareas de baja prioridad, deben cumplirse las condiciones del decorador más a la izquierda (de mayor prioridad).22

Nodos de servicio (Service Nodes) en la arquitectura de UE5

Otro bloque de construcción desarrollado específicamente para UE5 y completamente diferente de los conceptos clásicos de árboles de comportamiento es el tipo de nodo específico llamado "Service" (Servicio). Los servicios no realizan acciones como los nodos hoja ni interrumpen el flujo como los decoradores. Son nodos de actualización que solo se pueden añadir a los nodos compuestos (Selector/Sequence) y que se activan continuamente a intervalos de tiempo (frequency) determinados en segundo plano mientras se ejecuta esa rama.27

Los desarrolladores utilizan los Servicios para seguir la posición móvil del objetivo, calcular la distancia al jugador o actualizar regularmente los datos en el Blackboard comprobando las variables del entorno.19 Mientras que en otros motores de juego es necesario escribir complejas ramas paralelas (Parallel Nodes) o códigos pesados en C# para este tipo de actualizaciones periódicas de datos, UE5 optimiza increíblemente el rendimiento del procesador localizando esto en una rama específica del árbol. Un servicio ejecuta el método "Tick" mientras la Sequence o el Selector al que está conectado esté activo, y se cierra al salir de esa rama, dejando de consumir rendimiento.27

Unity 6 Behavior Package (v1.0+): Arquitectura de árbol moderna, visual y versátil

Históricamente, los desarrolladores que utilizaban el motor Unity han tenido que confiar principalmente en complementos de activos (assets) de terceros como NodeCanvas, Behavior Designer o Playmaker para sus complejas soluciones de IA dentro del juego.30 Sin embargo, con el paquete oficial "Unity Behavior" (versión 1.0.x) introducido en las versiones Unity 6000 y posteriores, el motor ha obtenido un editor de lógica visual oficial integrado, optimizado en rendimiento y totalmente dirigido por eventos.

Los ingenieros de Unity han marcado el nombre del sistema como "Gráficos de comportamiento" (Behavior Graphs) para separar esta estructura moderna que han creado de las rígidas jerarquías de los árboles de comportamiento clásicos y para enfatizar que contiene características no lineales y mucho más adaptativas donde las ramas pueden volver a unirse (Join nodes). El sistema Unity Behavior está integrado directamente en la infraestructura de serialización y la lógica de C# en las profundidades del motor. Al igual que en UE5, mientras que las tareas de transporte de datos se gestionan a través de variables de "Blackboard", la lógica de gráficos funciona con disparadores basados en eventos. En el sistema, los nodos se dividen en dos grupos principales según sus funciones universales: nodos de "Control de flujo" (Control flow) que deciden a dónde irá el flujo, y nodos de "Acción" (Action), generalmente codificados en color gris, que realizan acciones concretas. Los nodos de control de flujo, a su vez, se clasifican internamente como nodos de Secuenciación (Sequencing) y Modificadores (Modifier).

Nodos de secuenciación en Unity: Sequence y Try In Order

Aunque los nodos de secuenciación en el paquete de Unity cumplen exactamente la lógica de Sequence y Selector en los árboles clásicos, utilizan una sintaxis diferente e innovadora en términos de nomenclatura y disposición funcional. El nodo tradicional "Selector" se denomina "Try In Order" (Intentar en orden) en el ecosistema de Unity.

  1. Nodo Sequence (Secuencial): Funciona exactamente con la lógica tradicional. Ejecuta las ramas en orden de izquierda a derecha; si alguna falla, rompe el flujo y devuelve Failure, si todas tienen éxito, devuelve Success. Una de las características más innovadoras de la interfaz de Unity Behavior es la estructura de "Secuencia implícita" (Implicit Sequence / Stacking). Cuando varios nodos de acción se apilan verticalmente en el editor visual (por ejemplo, cuando se añaden tres nodos de animación seguidos), el sistema no requiere un nodo Sequence adicional para conectarlos entre sí. En tiempo de ejecución (runtime), esta estructura apilada se convierte automáticamente en un nodo secuencial oculto. De esta forma, la confusión del gráfico visual y la apariencia de "espagueti" se reducen en gran medida.

  2. Nodo Try In Order (Selector): Como su nombre indica, este nodo intenta las ramas en orden de izquierda a derecha hasta que una opción tiene "Éxito". En este contexto, es el equivalente lógico exacto del nodo "Selector" o "Fallback" en los árboles de comportamiento clásicos. Se utiliza generalmente en escenarios donde el agente necesita encontrar la "mejor opción" entre diferentes estrategias.

  3. Nodos Run In Parallel y Random: Son estructuras de flujo utilizadas para ejecutar todas las ramas conectadas al mismo tiempo (simultáneamente) o para elegir una de las hijas de forma totalmente aleatoria. En las ejecuciones paralelas, la lógica del nodo padre se puede configurar con detalles precisos como "Wait For All" (Esperar a que todas las ramas terminen con éxito) o "Wait For Any" (Es suficiente con que termine cualquier rama).

Nodos Modificadores (Modifier) y Arquitectura de Interrupción Dirigida por Eventos

Unity Behavior ha situado el concepto de nodo "Decorador" de los árboles clásicos en un marco mucho más funcional al agruparlo bajo la categoría de nodos "Modificador" (Modifier). Un nodo modificador es una estructura de control que solo puede tener un único hijo y gestiona directamente el modo de funcionamiento, el recuento de ejecuciones (Repeat), el estado que devuelve (Inverter, Succeeder) o la condición de activación (Cooldown) de dicha rama secundaria a la que está conectado. En el ecosistema de Unity, los subtipos más vitales de estos nodos que gestionan el flujo del juego son las modificaciones "Abort" (Interrumpir) y "Restart" (Reiniciar). El nodo Abort, cuando se cumplen las condiciones configuradas a través del Node Inspector (por ejemplo: Salud < 20) (Any Are True / All Are True), detiene inmediatamente la ejecución de la rama situada debajo de él y transmite Failure a su padre. Por el contrario, Restart sigue la lógica inversa: cuando las condiciones pasan a ser adecuadas, restablece una rama que se está ejecutando actualmente y la inicia desde el principio.

La verdadera revolución en el sistema moderno de Unity es el sistema de "Interrupción Prioritaria Basada en Observadores" (Observer-based priority interruption), que es un reflejo directo del legendario mecanismo "Observer Aborts" de Unreal Engine. Según las guías oficiales, esta estructura permite que las acciones de alta prioridad (ramas izquierdas en el gráfico) interrumpan automáticamente las acciones de baja prioridad (ramas derechas) cuando las condiciones sean propicias. Los desarrolladores no tienen que escribir largas cláusulas de guarda (guard clauses) de salida en la rama de patrulla para que un agente enemigo abandone la tarea de "Patrulla" (Patrol) y salte a la rama de "Ataque" (Attack) como resultado de atacar repentinamente mientras patrulla. La rama izquierda de alta prioridad (Attack) define su condición en modo "Observer Abort". De este modo, el sistema monitoriza automáticamente la acción de patrulla del lado derecho en segundo plano y, cuando se cumple la condición, cancela el proceso de menor prioridad y desvía el flujo hacia la izquierda. Del mismo modo, el observador "Self" también está activo en Unity; si sus propias condiciones previas dejan de ser válidas mientras se ejecuta una rama activa, la acción se cancela al instante. Gracias a esto, se crean gráficos de comportamiento con un bajo coste de mantenimiento (maintenance complexity) y una jerarquía sumamente legible (prioridad de izquierda a derecha).

Además, Unity Behavior admite directamente subgráficos (Subgraphs). Un comportamiento complejo (por ejemplo, trazar una ruta de patrulla) se puede guardar como un gráfico pequeño e insertarse de forma dinámica o estática dentro del árbol principal mediante el nodo "Run Subgraph", lo que garantiza el diseño modular de sistemas colosales de inteligencia artificial. Los desarrolladores pueden integrar sus propios nodos de acción personalizados (Custom Action Nodes) en el sistema de Behavior en cuestión de segundos mediante scripts que albergan los métodos OnStart, OnUpdate y OnEnd, semejantes a la estructura tradicional de un MonoBehaviour de C#.

Síntesis Arquitectónica: Análisis Comparativo de los Marcos de Unreal Engine 5 y Unity Behavior

Unreal Engine 5 y Unity, los dos motores de juego dominantes de la industria, aunque se basan fundamentalmente en la misma teoría matemática para las decisiones de inteligencia artificial y en la estructura jerárquica que reduce la complejidad de las FSM, presentan distinciones evidentes en sus interfaces de usuario, terminologías y metodologías específicas de resolución de problemas.

Concepto / Mecanismo Funcional

Unreal Engine 5 (Behavior Tree)

Unity Behavior (v1.0+) (Behavior Graph)

Nodo O (OR) Lógico

Selector Node (Selector). Avanza hacia la derecha hasta encontrar un hijo con éxito.

Try In Order Node. Aparte del nombre, la función es totalmente idéntica.

Nodo Y (AND) Lógico

Sequence Node (Secuencial). Disposición clásica en árbol jerárquico.

Sequence Node / Implicit Stacking. La disposición vertical genera automáticamente un nodo secuencial implícito.

Condición de Nodo / Filtros de Protección

Decorator Node (Decorador). Retiene la entrada de la rama.

Modifier Node / Conditional Branch. Modifica la dirección del flujo, el recuento de bucles y la lógica.

Sistema Dinámico de Interrupción y Reactividad

Observer Aborts (None, Self, Lower Priority, Both). Escucha de forma pasiva las variables de la pizarra.

Observer-Based Priority Interruption (Self, Priority). La alta prioridad siempre interrumpe a la baja prioridad.

Actualización de Datos en Segundo Plano

Service Node. Se añade a nodos compuestos, se ejecuta a determinadas frecuencias mientras la rama está activa.

Se procesa en paralelo mediante nodos Run In Parallel, scripts de C# o nodos de Action dentro del gráfico.

Organización de Subárboles y Modularidad

Run Behavior Tree (Se ejecuta otro árbol como una Task desde el interior de un árbol).

Run Subgraph (Los subgráficos se insertan con variables estáticas o dinámicas).

Mecanismo de Transporte de Estado y Datos

Blackboard Data Asset (Activo de datos independiente y Keys).

Blackboard Variables (Interfaz visual de Blackboard y conexiones por referencia de C#).

Tabla 3: Equivalencias terminológicas y operativas de los conceptos de árbol de comportamiento de inteligencia artificial en las plataformas Unreal Engine 5 y Unity Behavior (versión 1.0.15+). Aunque ambos motores buscan la modularidad, Unity ha priorizado la "legibilidad humana" (human-readable) en sus denominaciones.

Los análisis y las estadísticas operativas demuestran que, en comparación con el número de transiciones () que aumenta exponencialmente de forma proporcional al cuadrado del número de estados en los diseños clásicos de FSM, diseñar nuevos comportamientos en arquitecturas de Behavior Tree solo requiere añadir nuevas acciones o nodos decoradores () al árbol. Este crecimiento estructural lineal ha hecho posibles diseños de inteligencia artificial masivos, reactivos y libres de errores que se han convertido en el estándar de la industria tanto en plataformas de Unity como de Unreal. Sin embargo, para evitar que una operación prolongada provoque el bloqueo del árbol, la manipulación del estado "Running" (En ejecución) es de suma importancia. Cuando a un agente de inteligencia artificial se le da la orden de ir del punto A al punto B, devuelve "En ejecución" en cada ciclo hasta que se complete esta tarea. Cuando el proceso termina sin errores, en el lado de UE5 el estado de éxito se sella dentro de Blueprint con el nodo "Finish Execute", y en el lado de Unity mediante la metodología OnEnd en el script de C#.

Conceptos Avanzados y Sistemas Híbridos: Árboles de Estado (State Trees)

Aunque el modelo de "reactividad sin memoria" de los árboles de comportamiento proporciona una ventaja inigualable cuando se trata de combate táctico o decisiones instantáneas (microgestión), tiene dificultades para controlar estados de ánimo a muy largo plazo, contextos pasados o macromodos de la inteligencia artificial. Una de las críticas más expresadas por los desarrolladores es la necesidad imperativa de mantener los datos de decisiones pasadas en la Blackboard o en variables globales, y no en el propio diseño del árbol.

Gracias a la flexibilidad que brindan los motores UE5 y Unity, los desarrolladores han encontrado formas de superar estas limitaciones estructurales combinando los árboles de comportamiento con las FSM. En particular, a partir de Unreal Engine 5.1, se ha incorporado al ecosistema de IA del motor un concepto nuevo e innovador llamado "State Trees" (Árboles de Estado). Los árboles de estado son un sistema híbrido que constituye la unión arquitectónica de FSM y árboles de comportamiento. Los árboles de estado utilizan la estructura de máquina de estados para la gestión de estados generales y amplios (por ejemplo: Combate, Huida, Patrulla, Sueño). No obstante, cuando la máquina pasa al estado de "Combate", las reacciones y el conjunto de acciones instantáneas dentro de este estado se vinculan a transiciones específicas y evaluaciones basadas en tareas utilizando la lógica de árbol.

En la filosofía del diseño moderno de videojuegos, la metodología más eficaz aplicada por los profesionales es la ejecución en paralelo de estos dos sistemas. Los desarrolladores gestionan el estado de ánimo y los macroestados de los agentes, tales como "Tranquilo", "Desconfiado" o "Agresivo", a través de una Máquina de Estados (State Tree) o una clase macro-gestora.

5 Cuando el sistema pasa al estado "Agresivo", lo que la FSM activa como acción es, en realidad, ejecutar un complejo "Árbol de Comportamiento" (Behavior Tree) de ataque. Las decisiones sobre si el agente debe correr hacia el enemigo en ese preciso segundo, ponerse a cubierto y recargar, o si está a la distancia adecuada para lanzar una granada son tomadas por los nodos Selector y Sequence dentro de los BT. 46 Esta síntesis entre macro-FSM y micro-BT fusiona impecablemente el alto poder expresivo de las máquinas de estados con la alta reactividad de los árboles de comportamiento.

Conclusión

La ejecución de la planificación y las cadenas de lógica algorítmica de la inteligencia artificial en los videojuegos han alcanzado una flexibilidad, modularidad y jerarquía de diseño incomparables gracias a los árboles de comportamiento (Behavior Trees), que a lo largo de los años se han transformado en un estándar colosal de la industria. Mientras que los nodos secuenciales garantizan el encadenamiento estricto de las acciones y filtran los fallos de forma instantánea; los nodos selectores permiten la priorización táctica, la toma de decisiones reactiva y la prueba inequívoca de alternativas. Por su parte, los nodos decoradores (modificadores), que envuelven todo este cuerpo compuesto como una corteza exterior, permiten reaccionar al instante a estímulos externos dinámicos y manipular el flujo. Unreal Engine 5 ofrece un ecosistema sumamente maduro y de bajo coste de rendimiento en la programación de inteligencia artificial gracias a su infraestructura única dirigida por eventos (event-driven), optimizaciones de Blackboard, nodos de servicio (Service) que proporcionan microajustes y mecanismos excepcionales de Observer Abort. Por otro lado, Unity, con el paquete oficial de Unity Behavior (Gráficos de Comportamiento) integrado en el núcleo del motor en su 6.ª generación, ha llevado este estándar a una dimensión sumamente accesible en cuanto a visualización, lectura con denominaciones fluidas como "Try In Order" y diseño de gráficos no lineales a gran escala gracias a la integración moderna con C#. Esta estructura jerárquica erigida frente a las clásicas Máquinas de Estados (FSM) no solo elige el siguiente movimiento del agente; al mismo tiempo, consolida su autoridad indiscutible en el ecosistema de los motores de juego garantizando la legibilidad de los sistemas de inteligencia artificial a gran escala, los procesos de depuración y la modularidad basada en proyectos mediante ramas secundarias reutilizables (subgraphs). El análisis sistemático demuestra que, en los proyectos modernos, el uso correcto de la composición, la decoración y las estrategias de interrupción dirigida por eventos (Abort) constituye el requisito más fundamental y crítico para dar vida a agentes orgánicos, inteligentes y vivos, algo que el código estático por sí solo jamás podría engendrar.

*Información: Las imágenes han sido generadas por Google Gemini.

BehaviorTreeGameAIUE5SequenceNodeFSMStateTree
Herramienta de investigación profunda
Google Gemini
Google Gemini
Herramienta de traducción
Google Gemini
Google Gemini

Compartir
Estructuras de nodos de IA: Nodos Selector, Sequence (Secuencia) y Decorator en árboles de comportamiento | GameDev Base