Saltar a contenido

BT Condition

Tipo: Branch (In → True / False)
Categoría: AI_BT

Lee una clave del blackboard, evalúa una expresión Python y ramifica la ejecución. También fija _bt_last_result según el resultado, para que un Selector o Sequence posterior pueda leerlo.

Es el nodo de toma de decisiones del árbol: la "pregunta" que determina qué rama se activa.

Propiedades

Propiedad Tipo Por defecto Descripción
BB Key String "" Clave del blackboard a leer. Su valor queda disponible como val en la condición
Condition String "val == True" Expresión Python. val = valor del blackboard, self = componente

Sockets

Socket Dirección Tipo Descripción
In Entrada Exec
True Salida Exec Ejecuta si la condición es verdadera
False Salida Exec Ejecuta si la condición es falsa

Variables afectadas

Variable Valor tras ejecución
_bt_last_result 'SUCCESS' si condición es True, 'FAILURE' si es False

Expresiones de ejemplo

Comparación simple

BB Key:    enemy_visible
Condition: val == True

Distancia umbral

BB Key:    dist_to_player
Condition: val is not None and val < 10.0

Verificar tipo de estado

BB Key:    ai_state
Condition: val in ('PATROL', 'IDLE')

Sin blackboard (condición directa sobre self)

BB Key:    (vacío)
Condition: self.own.worldPosition.z > 0.5

Cuando BB Key está vacío, val será None. Puedes ignorar val y escribir cualquier expresión Python que use self.

Verificar propiedad BGE del objeto

BB Key:    (vacío)
Condition: self.own.get('hp', 100) > 20

Comportamiento ante errores

Si la expresión lanza una excepción (nombre de variable incorrecto, método no encontrado, etc.), el resultado es False (→ rama False, _bt_last_result = 'FAILURE'). No hay crash.

Posición en el grafo

[OnUpdate] → [BT Simple Parallel: actualizar enemy_visible]
                    │
                    Out ──► [BT Condition: enemy_visible]
                                  ├── True ──► [BT Move To: enemy]
                                  └── False ──► [BT Move To: patrol_point]

Notas

  • BTCondition no es solo un decorador — es también un nodo de flujo (como Branch en FLOW). Sus salidas True/False pueden conectar a ramas completamente distintas del árbol.
  • A diferencia de BTInverter, BTCondition define el resultado en lugar de transformarlo.
  • Si necesitas evaluar múltiples condiciones en AND/OR, usa una expresión compuesta: val and self.own.get('hp', 0) > 0.