🎮 UnityDocs

Árboles de comportamiento (Behaviour Trees)

La estructura para IA compleja que la máquina de estados no escala bien: nodos de selección y secuencia que componen comportamientos jerárquicos. Qué son, cómo funcionan y cuándo elegirlos frente a una FSM.

📄 ArtículoAvanzado✅ RevisadoUnity 6.0 LTSActualizado 2026-07-15
DificultadConceptual Código Matemáticas
Tiempo📖 Lectura 9 min

El problema de escalar la IA#

Una máquina de estados (FSM) es perfecta para pocos comportamientos (Patrullar, Perseguir, Atacar). Pero cuando la IA se vuelve compleja —con muchas condiciones, comportamientos anidados y prioridades—, las transiciones entre estados crecen de forma explosiva ("de cada estado a cada estado") y se vuelve inmanejable. Ahí entran los árboles de comportamiento (Behaviour Trees, BT), el estándar de la IA en muchos juegos AAA.

Cómo funciona un árbol#

Un BT es un árbol de nodos que se recorre de arriba abajo cada "tick" (cada cierto tiempo). Cada nodo, al ejecutarse, devuelve uno de tres estados: Éxito, Fallo o En ejecución (running). Los nodos padre deciden qué hacer según lo que devuelvan sus hijos.

Los dos nodos compositores fundamentales:

  • Selector (o fallback): prueba sus hijos de izquierda a derecha y para en el primero que tiene éxito. Es un "O": "¿puedo huir? ¿si no, atacar? ¿si no, patrullar?".
  • Sequence (secuencia): ejecuta sus hijos en orden y para en el primero que falla. Es un "Y": "ir a la puerta Y abrirla Y cruzarla".

Además hay hojas (las acciones y condiciones concretas: "¿veo al jugador?", "moverme a X", "atacar") y decoradores (modifican a un hijo: invertir, repetir, poner una condición).

Un ejemplo mental#

Un guardia, de mayor a menor prioridad (un Selector arriba):

texto
Selector (haz lo primero que puedas)
├── Sequence: HUIR
│   ├── ¿Vida baja?              (condición)
│   └── Correr a la salida       (acción)
├── Sequence: ATACAR
│   ├── ¿Veo al jugador?         (condición)
│   ├── ¿Está a rango?           (condición)
│   └── Atacar                   (acción)
├── Sequence: PERSEGUIR
│   ├── ¿Veo al jugador?         (condición)
│   └── Ir hacia el jugador      (acción → NavMesh)
└── Patrullar                    (acción por defecto, siempre éxito)

Cada tick, el árbol intenta huir; si no procede, atacar; si no, perseguir; y si nada aplica, patrulla. Añadir un comportamiento nuevo es enchufar una rama, sin tocar transiciones cruzadas. Ese es su gran valor.

BT vs máquina de estados#

⚖️ Comparativa · Behaviour Tree vs FSM
Máquina de estados (FSM)Árbol de comportamiento (BT)
EstructuraEstados + transicionesÁrbol de nodos con prioridad
Escala con la complejidadMal (transiciones explotan)Bien (ramas modulares)
PrioridadesManuales, en cada transiciónImplícitas por orden (Selector)
CurvaBajaMedia-alta
Ideal paraIA sencilla (2-5 comportamientos)IA compleja, jerárquica
No empieces por aquí

Para un enemigo con 2-3 comportamientos, una FSM es más simple y suficiente; montar un BT sería sobreingeniería. El BT gana cuando la IA tiene muchos comportamientos con prioridades y condiciones anidadas. Elige la herramienta según la complejidad real, no por moda.

Cómo implementarlo#

Puedes escribir un BT a mano (nodos como clases con un método Evaluar() que devuelve Éxito/Fallo/Running, compositores que recorren sus hijos), pero para producción se suele usar una herramienta visual: el propio Unity ha ofrecido soluciones de Behavior (paquete Muse/Behavior), y hay assets muy usados en la comunidad. Lo importante es entender el concepto: la implementación concreta varía.

La estructura mínima de un nodo hecho a mano:

C#
public enum Estado { Exito, Fallo, Running }

public abstract class Nodo
{
    public abstract Estado Evaluar();
}

// Selector: éxito si ALGÚN hijo tiene éxito
public class Selector : Nodo
{
    private readonly Nodo[] hijos;
    public Selector(params Nodo[] hijos) => this.hijos = hijos;

    public override Estado Evaluar()
    {
        foreach (var h in hijos)
        {
            var e = h.Evaluar();
            if (e != Estado.Fallo) return e;   // éxito o running: para aquí
        }
        return Estado.Fallo;
    }
}

Más allá: GOAP y utility AI#

Para IA aún más avanzada existen otros enfoques: GOAP (Goal-Oriented Action Planning: la IA planifica una secuencia de acciones para lograr un objetivo) y Utility AI (cada acción tiene una "puntuación" según el contexto y se elige la mejor). Son terreno muy avanzado; los BT cubren la enorme mayoría de necesidades antes de necesitarlos.

Errores frecuentes#

  • Montar un BT para una IA de 2 comportamientos (usa una FSM).
  • Confundir Selector (primer éxito, "O") con Sequence (primer fallo, "Y").
  • No manejar el estado Running y hacer que acciones largas (moverse) se reinicien cada tick.
  • Evaluar el árbol entero cada frame para muchos enemigos (tickea cada X, como en percepción de IA).

Ponte a prueba#

📝 Pon a prueba lo aprendido

Resumen#

Un árbol de comportamiento organiza IA compleja en nodos con prioridad: Selector (primer éxito, "O"), Sequence (primer fallo, "Y"), hojas (acciones/condiciones) y decoradores, cada uno devolviendo Éxito/Fallo/Running. Escala mucho mejor que una FSM cuando hay muchos comportamientos jerárquicos, pero es sobreingeniería para IA sencilla. Combínalo con NavMesh y percepción para las acciones y condiciones. Para casos extremos, existen GOAP y Utility AI.

Fuentes y para profundizar