🌳
Official Guide v1.2.0

TreeFlow.

A powerful, modular Behavior Tree system for Unity. Design complex AI behaviors for enemies, NPCs, bosses, and interactive objects using an intuitive visual node editor and a flexible runtime API.

Un système de Behavior Tree puissant et modulaire pour Unity. Concevez des comportements IA complexes pour vos ennemis, NPCs, boss et objets interactifs grâce à un éditeur visuel intuitif et une API runtime flexible.

Un sistema de Árbol de Comportamiento potente y modular para Unity. Diseña comportamientos de IA complejos para enemigos, NPCs, jefes y objetos interactivos usando un editor visual intuitivo y una API de tiempo de ejecución flexible.

一个强大、模块化的Unity行为树系统。使用直观的可视化节点编辑器和灵活的运行时API, 为敌人、NPC、Boss和交互对象设计复杂的AI行为。

✓ Visual Editor ✓ Éditeur Visuel ✓ Editor Visual ✓ 可视化编辑器 ✓ Blackboard ✓ BBParameter ✓ Scene Overrides ✓ Live Debug ✓ Debug en direct ✓ Debug en vivo ✓ 实时调试

🌳 What is a Behavior Tree? 🌳 Qu'est-ce qu'un Behavior Tree ? 🌳 ¿Qué es un Árbol de Comportamiento? 🌳 什么是行为树?

A Behavior Tree is a hierarchical structure used to model AI decision-making. Unlike state machines, behavior trees are modular, reusable, and easier to debug. They execute from top to bottom, left to right, with each node returning Success, Failure, or Running.

Un Behavior Tree est une structure hiérarchique utilisée pour modéliser la prise de décision de l'IA. Contrairement aux machines à états, les arbres de comportement sont modulaires, réutilisables et plus faciles à déboguer. Ils s'exécutent de haut en bas, de gauche à droite.

Un Árbol de Comportamiento es una estructura jerárquica utilizada para modelar la toma de decisiones de la IA. A diferencia de las máquinas de estado, los árboles de comportamiento son modulares, reutilizables y más fáciles de depurar.

行为树是一种用于建模AI决策的层次结构。与状态机不同,行为树是模块化的、可重用的, 更容易调试。它们从上到下、从左到右执行,每个节点返回成功、失败或运行中。

Example Tree Structure Structure d'arbre exemple Estructura de árbol de ejemplo 示例树结构

          [Root]┌─────[Selector]─────┐
      │                    │
[Sequence]           [Sequence]
    │                     │
[CanSeePlayer?]    [Patrol][Inverter][ChasePlayer]
🎨

Visual Editor Éditeur Visuel Editor Visual 可视化编辑器

Dark-themed node graph editor with drag & drop, zoom, pan, and real-time debugging. Éditeur de graphe sombre avec drag & drop, zoom, pan et débogage en temps réel. Editor de grafos oscuro con arrastrar y soltar, zoom, pan y depuración en tiempo real. 深色主题节点图编辑器,支持拖放、缩放、平移和实时调试。

📋

Blackboard

Typed key-value storage for sharing data between nodes. Supports events and runtime changes. Stockage clé-valeur typé pour partager des données entre nodes. Supporte les événements. Almacenamiento clave-valor tipado para compartir datos entre nodos. Soporta eventos. 类型化的键值存储,用于在节点之间共享数据。支持事件和运行时更改。

🔗

BBParameter

Flexible parameters that can be constants or bound to Blackboard keys at design time. Paramètres flexibles pouvant être des constantes ou liés aux clés du Blackboard. Parámetros flexibles que pueden ser constantes o vinculados a claves del Blackboard. 灵活的参数,可以是常量或在设计时绑定到Blackboard键。

🔌

Extensible Extensible Extensible 可扩展

Create custom Action, Condition, Composite, and Decorator nodes with simple C# classes. Créez des nodes personnalisés avec de simples classes C#. Crea nodos personalizados con simples clases C#. 使用简单的C#类创建自定义Action、Condition、Composite和Decorator节点。

🏗️ System Architecture 🏗️ Architecture du Système 🏗️ Arquitectura del Sistema 🏗️ 系统架构

How TreeFlow Works Comment fonctionne TreeFlow Cómo funciona TreeFlow TreeFlow 工作原理

📝

1. Design 1. Conception 1. Diseño 1. 设计

Create BehaviorTree and Blackboard assets Créez les assets BehaviorTree et Blackboard Crea los assets BehaviorTree y Blackboard 创建BehaviorTree和Blackboard资源

🎨

2. Build 2. Construction 2. Construir 2. 构建

Add and connect nodes in the visual editor Ajoutez et connectez les nodes dans l'éditeur Añade y conecta nodos en el editor visual 在可视化编辑器中添加和连接节点

▶️

3. Run 3. Exécution 3. Ejecutar 3. 运行

BehaviorTreeRunner executes the tree at runtime BehaviorTreeRunner exécute l'arbre au runtime BehaviorTreeRunner ejecuta el árbol en runtime BehaviorTreeRunner在运行时执行树

File Structure Structure des Fichiers Estructura de Archivos 文件结构

Assets/Plugins/TreeFlow/
    ├── Editor/                          # Editor-only code (not in build)
    │   ├── Core/
    │   │   ├── BehaviorTreeEditor.cs    # Main editor window
    │   │   ├── BehaviorTreeView.cs      # Node graph view (GraphView)
    │   │   ├── BTNodeView.cs            # Individual node rendering
    │   │   ├── InspectorView.cs         # Node property inspector
    │   │   ├── NodeSearchWindow.cs      # Add node search popup
    │   │   └── Toolbar.cs               # Editor toolbar
    │   ├── Nodes/                       # Custom node editors
    │   ├── Utilities/                   # Property drawers
    │   ├── BlackboardView.cs            # Blackboard panel
    │   └── BehaviorTreeRunnerEditor.cs  # Inspector for Runner
    │
    └── Runtime/                         # Runtime code (included in build)
        ├── Core/
        │   ├── BTNode.cs                # Base class for ALL nodes
        │   ├── BehaviorTree.cs          # ScriptableObject tree asset
        │   ├── BehaviorTreeRunner.cs    # MonoBehaviour that runs the tree
        │   ├── BlackboardKeyAttribute.cs # Attribute for key selection
        │   ├── BBParameter_GenericTypes.cs
        │   ├── NodeStatus.cs            # Success, Failure, Running enum
        │   └── RootNode.cs              # Entry point node
        ├── Blackboard/
        │   ├── Blackboard.cs            # Key-value storage
        │   ├── BlackboardKey.cs
        │   └── BlackboardValue.cs       # Typed value container
        └── Nodes/                       # Built-in nodes
            ├── ActionNode.cs            # Base for action nodes
            ├── ConditionNode.cs         # Base for condition nodes
            ├── CompositeNode.cs         # Base for composite nodes
            ├── DecoratorNode.cs         # Base for decorator nodes
            ├── SequenceNode.cs          # AND logic
            ├── SelectorNode.cs          # OR logic
            ├── ParallelNode.cs          # Concurrent execution
            ├── WaitActionNode.cs        # Wait for time
            ├── LogNodeAction.cs         # Debug.Log
            └── InverterNodeDecorator.cs # Invert result

📦 TreeFlow.Runtime

Included in your game build. Contains everything needed to run behavior trees. Inclus dans le build du jeu. Contient tout le nécessaire pour exécuter les arbres. Incluido en el build del juego. Contiene todo lo necesario para ejecutar árboles. 包含在游戏构建中。包含运行行为树所需的一切。

  • • BTNode, BehaviorTree, BehaviorTreeRunner
  • • Blackboard system
  • • All BBParameter types
  • • Built-in nodes
  • • BTNode, BehaviorTree, BehaviorTreeRunner
  • • Système Blackboard
  • • Tous les types BBParameter
  • • Nodes intégrés
  • • BTNode, BehaviorTree, BehaviorTreeRunner
  • • Sistema Blackboard
  • • Todos los tipos BBParameter
  • • Nodos integrados
  • • BTNode、BehaviorTree、BehaviorTreeRunner
  • • Blackboard系统
  • • 所有BBParameter类型
  • • 内置节点

🛠️ TreeFlow.Editor

Editor-only. Stripped from builds. Contains visual tools. Éditeur uniquement. Supprimé des builds. Contient les outils visuels. Solo editor. Eliminado de los builds. Contiene herramientas visuales. 仅编辑器。从构建中剥离。包含可视化工具。

  • • Visual node editor (GraphView-based)
  • • Blackboard inspector
  • • Custom property drawers
  • • Live debugging overlays
  • • Éditeur visuel (basé sur GraphView)
  • • Inspecteur Blackboard
  • • Property drawers personnalisés
  • • Overlays de débogage
  • • Editor visual (basado en GraphView)
  • • Inspector de Blackboard
  • • Property drawers personalizados
  • • Overlays de depuración
  • • 可视化节点编辑器(基于GraphView)
  • • Blackboard检查器
  • • 自定义属性绘制器
  • • 实时调试叠加层

📥 Installation 📥 Installation 📥 Instalación 📥 安装

1 From Asset Store Depuis l'Asset Store Desde Asset Store 从Asset Store安装

  1. Open Window → Package Manager Ouvrez Window → Package Manager Abre Window → Package Manager 打开 Window → Package Manager
  2. Switch to "My Assets" and find TreeFlow Passez sur "My Assets" et trouvez TreeFlow Cambia a "My Assets" y busca TreeFlow 切换到"My Assets"并找到TreeFlow
  3. Click Import Cliquez sur Import Haz clic en Import 点击 Import

2 Manual Installation Installation Manuelle Instalación Manual 手动安装

  1. Download or clone the repository Téléchargez ou clonez le repository Descarga o clona el repositorio 下载或克隆仓库
  2. Copy TreeFlow/ folder to Assets/Plugins/ Copiez le dossier TreeFlow/ dans Assets/Plugins/ Copia la carpeta TreeFlow/ a Assets/Plugins/ TreeFlow/ 文件夹复制到 Assets/Plugins/
  3. Wait for Unity to recompile Attendez la recompilation Unity Espera que Unity recompile 等待Unity重新编译
⚠️

Requirements Prérequis Requisitos 要求

Unity 2021.3 LTS or higher. Compatible with Built-in, URP, and HDRP. Unity 2021.3 LTS ou supérieur. Compatible avec Built-in, URP, et HDRP. Unity 2021.3 LTS o superior. Compatible con Built-in, URP, y HDRP. Unity 2021.3 LTS 或更高版本。兼容 Built-inURPHDRP

🚀 Quick Start 🚀 Démarrage Rapide 🚀 Inicio Rápido 🚀 快速开始

Follow these 5 steps to create your first behavior tree: Suivez ces 5 étapes pour créer votre premier arbre de comportement : Sigue estos 5 pasos para crear tu primer árbol de comportamiento: 按照以下5个步骤创建您的第一个行为树:

1

Create a Blackboard Asset Créer un Asset Blackboard Crear un Asset Blackboard 创建Blackboard资源

The Blackboard stores shared data that nodes can read and write. Le Blackboard stocke les données partagées que les nodes peuvent lire et écrire. El Blackboard almacena datos compartidos que los nodos pueden leer y escribir. Blackboard存储节点可以读取和写入的共享数据。

In Project window: Right-click → Create → TreeFlow → Blackboard Dans Project : Clic droit → Create → TreeFlow → Blackboard En Project: Clic derecho → Create → TreeFlow → Blackboard 在Project窗口中:右键 → Create → TreeFlow → Blackboard

Add keys like: Target (GameObject), Speed (Float), IsAlert (Bool) Ajoutez des clés comme : Target (GameObject), Speed (Float), IsAlert (Bool) Añade claves como: Target (GameObject), Speed (Float), IsAlert (Bool) 添加键如:Target (GameObject)、Speed (Float)、IsAlert (Bool)

2

Create a Behavior Tree Asset Créer un Asset Behavior Tree Crear un Asset Behavior Tree 创建行为树资源

Right-click → Create → TreeFlow → Behavior Tree Clic droit → Create → TreeFlow → Behavior Tree Clic derecho → Create → TreeFlow → Behavior Tree 右键 → Create → TreeFlow → Behavior Tree

Then assign your Blackboard in the Inspector. Puis assignez votre Blackboard dans l'Inspector. Luego asigna tu Blackboard en el Inspector. 然后在Inspector中分配您的Blackboard。

3

Open the Visual Editor Ouvrir l'Éditeur Visuel Abrir el Editor Visual 打开可视化编辑器

Double-click the BehaviorTree asset to open the editor window. Double-cliquez sur l'asset BehaviorTree pour ouvrir l'éditeur. Doble clic en el asset BehaviorTree para abrir el editor. 双击 BehaviorTree资源以打开编辑器窗口。

Example: Simple patrol/alert tree Exemple : Arbre patrouille/alerte simple Ejemplo: Árbol de patrulla/alerta simple 示例:简单的巡逻/警报树

              [Root][Selector]
          /          \
   [Sequence]      [Sequence]
       │               │
[IsAlert?]      [Patrol]
       │               │
[ChaseTarget]    [Wait 2s][Attack]
4

Add BehaviorTreeRunner to a GameObject Ajouter BehaviorTreeRunner à un GameObject Añadir BehaviorTreeRunner a un GameObject 将BehaviorTreeRunner添加到GameObject

// Option A: Via Inspector
// Add Component → BehaviorTreeRunner
// Assign your BehaviorTree asset

// Option B: Via Script
using TreeFlow.Runtime.Core;

public class Enemy : MonoBehaviour
{
    public BehaviorTree aiTree;
    
    void Start()
    {
        var runner = gameObject.AddComponent<BehaviorTreeRunner>();
        runner.tree = aiTree;
        runner.updateInterval = 0.1f; // 10 ticks per second
        runner.enableDebug = true;
    }
}
5

Press Play! Appuyez sur Play ! ¡Presiona Play! 按下Play!

The tree executes automatically. Enable enableDebug to see node states in the Console. L'arbre s'exécute automatiquement. Activez enableDebug pour voir les états dans la Console. El árbol se ejecuta automáticamente. Activa enableDebug para ver estados en la Consola. 树会自动执行。启用 enableDebug 以在控制台中查看节点状态。

🚦 Node Status 🚦 Statuts des Nodes 🚦 Estados de Nodos 🚦 节点状态

Every node returns one of three statuses that control the flow of execution: Chaque node retourne l'un des trois statuts qui contrôlent le flux d'exécution : Cada nodo devuelve uno de tres estados que controlan el flujo de ejecución: 每个节点返回三个状态之一,控制执行流程:

Success

The node completed its task successfully. Le node a terminé sa tâche avec succès. El nodo completó su tarea exitosamente. 节点成功完成其任务。

Examples: Wait finished, condition true, target reached Exemples : Wait terminé, condition vraie, cible atteinte Ejemplos: Wait terminado, condición verdadera, objetivo alcanzado 示例:等待完成、条件为真、到达目标

Failure

The node failed to complete its task. Le node n'a pas pu terminer sa tâche. El nodo no pudo completar su tarea. 节点未能完成其任务。

Examples: Condition false, target null, path blocked Exemples : Condition fausse, cible null, chemin bloqué Ejemplos: Condición falsa, objetivo null, camino bloqueado 示例:条件为假、目标为空、路径被阻挡

Running

The node is still executing (multi-frame). Le node est encore en cours d'exécution (multi-frame). El nodo todavía está ejecutándose (multi-frame). 节点仍在执行中(多帧)。

Examples: Moving, waiting, playing animation Exemples : Déplacement, attente, animation Ejemplos: Movimiento, espera, animación 示例:移动中、等待中、播放动画
// TreeFlow/Runtime/Core/NodeStatus.cs
public enum NodeStatus
{
    Running,   // Still executing, call again next tick
    Success,   // Task completed successfully
    Failure    // Task failed
}

🧩 Node Types 🧩 Types de Nodes 🧩 Tipos de Nodos 🧩 节点类型

Action Nodes

Leaf nodes that perform actual work. They don't have children. Nodes feuilles qui effectuent le travail. N'ont pas d'enfants. Nodos hoja que realizan trabajo real. No tienen hijos. 执行实际工作的叶节点。没有子节点。

Examples: Wait, Log, MoveTo, Attack, PlayAnimation Exemples : Wait, Log, MoveTo, Attack, PlayAnimation Ejemplos: Wait, Log, MoveTo, Attack, PlayAnimation 示例:Wait、Log、MoveTo、Attack、PlayAnimation

Condition Nodes

Check a condition and return Success (true) or Failure (false). Vérifient une condition et retournent Success (vrai) ou Failure (faux). Verifican una condición y devuelven Success (verdadero) o Failure (falso). 检查条件并返回Success(真)或Failure(假)。

Examples: IsHealthLow, CanSeeTarget, HasAmmo Exemples : IsHealthLow, CanSeeTarget, HasAmmo Ejemplos: IsHealthLow, CanSeeTarget, HasAmmo 示例:IsHealthLow、CanSeeTarget、HasAmmo
🔀

Composite Nodes

Control flow nodes with multiple children. Determine execution order. Nodes de contrôle avec plusieurs enfants. Déterminent l'ordre d'exécution. Nodos de control con múltiples hijos. Determinan el orden de ejecución. 具有多个子节点的控制流节点。确定执行顺序。

Examples: Sequence (AND), Selector (OR), Parallel Exemples : Sequence (ET), Selector (OU), Parallel Ejemplos: Sequence (Y), Selector (O), Parallel 示例:Sequence(与)、Selector(或)、Parallel
🎭

Decorator Nodes

Wrap a single child and modify its behavior or result. Enveloppent un enfant unique et modifient son comportement ou résultat. Envuelven un solo hijo y modifican su comportamiento o resultado. 包装单个子节点并修改其行为或结果。

Examples: Inverter, Repeat, Timeout, Cooldown Exemples : Inverter, Repeat, Timeout, Cooldown Ejemplos: Inverter, Repeat, Timeout, Cooldown 示例:Inverter、Repeat、Timeout、Cooldown

📋 Blackboard System 📋 Système de Blackboard 📋 Sistema de Blackboard 📋 黑板系统

Concept Concept Concepto 概念

The Blackboard is a shared memory for your AI. Instead of nodes referencing each other, they read and write to the Blackboard. This decouples logic from data. Le Blackboard est une mémoire partagée pour votre IA. Au lieu que les nodes se référencent mutuellement, ils lisent et écrivent dans le Blackboard. Cela sépare la logique des données. El Blackboard es una memoria compartida para tu IA. En lugar de que los nodos se referencien entre sí, leen y escriben en el Blackboard. Esto desacopla la lógica de los datos. 黑板是AI的共享内存。节点不相互引用,而是读写黑板。这将逻辑与数据解耦。

Blackboard Asset
Target GameObject
IsAlert true
PatrolSpeed 3.5
Bool
Int
Float
String
Vector3
Vector2
Quaternion
Color
LayerMask
GameObject
Transform
AudioClip
AnimationCurve
Object
AudioClip
AnimCurve
Quaternion
Vector2
Color
LayerMask

🔗 BBParameter 🔗 BBParameter 🔗 BBParameter 🔗 BB参数

BBParameters provide flexibility. They allow you to choose between a Constant Value or a Blackboard Key directly in the Inspector. Les BBParameters offrent de la flexibilité. Ils vous permettent de choisir entre une Valeur Constante ou une Clé Blackboard directement dans l'Inspector. BBParameters proporcionan flexibilidad. Te permiten elegir entre un Valor Constante o una Clave de Blackboard directamente en el Inspector. BB参数提供了灵活性。它们允许您直接在检查器中选择常量值黑板键

Inspector View (Mode: Constant)
Speed
Value is hardcoded to 5.0 Valeur fixée à 5.0 Valor fijo en 5.0 值固定为 5.0
Inspector View (Mode: Blackboard)
Speed
RunningSpeed (Float)
Value is read from key "RunningSpeed" Valeur lue depuis la clé "RunningSpeed" Valor leído de la clave "RunningSpeed" 从键 "RunningSpeed" 读取值

Usage in Code Utilisation dans le code Uso en código 代码使用

public class MyNode : ActionNode
{
    public BBFloat speed;  // The parameter

    protected override NodeStatus OnUpdate()
    {
        // Automatically handles Constant vs Blackboard logic
        float currentSpeed = speed.GetValue(blackboard);
        
        Move(currentSpeed);
        return NodeStatus.Running;
    }
}

🎬 Scene Overrides 🎬 Scene Overrides 🎬 Scene Overrides 🎬 场景覆盖

The Problem Le Problème El Problema 问题

Blackboard Assets are stored in the project files (ScriptableObject). They cannot directly reference objects in a specific Scene (like the Player or a Transform). Les Assets Blackboard sont stockés dans les fichiers (ScriptableObject). Ils ne peuvent pas référencer directement des objets d'une Scène (comme le Joueur ou un Transform). Los Assets Blackboard se guardan en archivos (ScriptableObject). No pueden referenciar directamente objetos de una Escena. Blackboard资产存储在项目文件(ScriptableObject)中。它们不能直接引用特定场景中的对象(如玩家或Transform)。

The Solution La Solution La Solución 解决方案

  1. 1

    Create a key in the Blackboard (e.g., Target of type GameObject). Leave the value empty. Créez une clé dans le Blackboard (ex: Target de type GameObject). Laissez la valeur vide. Crea una clave en el Blackboard (ej: Target tipo GameObject). Deja el valor vacío. 在Blackboard中创建一个键(例如:类型为 GameObjectTarget)。将值留空。

  2. 2

    Select the GameObject with BehaviorTreeRunner in your scene. Sélectionnez le GameObject avec BehaviorTreeRunner dans votre scène. Selecciona el GameObject con BehaviorTreeRunner en tu escena. 在场景中选择带有 BehaviorTreeRunner 的GameObject。

  3. 3

    Look for the Scene Overrides list in the Inspector. Drag your scene object (e.g., Player) into the slot for Target. Cherchez la liste Scene Overrides dans l'Inspector. Glissez votre objet de scène (ex: Player) dans l'emplacement Target. Busca la lista Scene Overrides en el Inspector. Arrastra tu objeto de escena (ej: Player) a la ranura Target. Target 插槽。

🔀 Composite Nodes 🔀 Nodes Composite 🔀 Nodos Composite 🔀 复合节点

Composite nodes control the flow of execution by managing multiple children. Les nodes composite contrôlent le flux d'exécution en gérant plusieurs enfants. Los nodos composite controlan el flujo de ejecución gestionando múltiples hijos. 复合节点通过管理多个子节点来控制执行流程。

Sequence

Composite/Sequence

Executes children in order from left to right. Fails immediately if any child fails. Returns Success only if ALL children succeed. Exécute les enfants dans l'ordre de gauche à droite. Échoue immédiatement si un enfant échoue. Retourne Success seulement si TOUS réussissent. Ejecuta los hijos en orden de izquierda a derecha. Falla inmediatamente si algún hijo falla. Retorna Success solo si TODOS tienen éxito. 按从左到右的顺序执行子节点。如果任何子节点失败,立即失败。只有当所有子节点都成功时才返回 Success

// Logic: AND — A && B && C

Selector

Composite/Selector

Tries children in order. Succeeds immediately if any child succeeds. Returns Failure only if ALL children fail. Essaie les enfants dans l'ordre. Réussit immédiatement si un enfant réussit. Retourne Failure seulement si TOUS échouent. Prueba los hijos en orden. Tiene éxito inmediatamente si algún hijo tiene éxito. Retorna Failure solo si TODOS fallan. 按顺序尝试子节点。如果任何子节点成功,立即成功。只有当所有子节点都失败时才返回 Failure

// Logic: OR — A || B || C

Parallel

Composite/Parallel

Executes all children simultaneously every tick. Configurable success/failure policies. Exécute tous les enfants simultanément à chaque tick. Politiques de succès/échec configurables. Ejecuta todos los hijos simultáneamente en cada tick. Políticas de éxito/fallo configurables. 每个tick同时执行所有子节点。可配置的成功/失败策略。

successPolicy

RequireAll — All must succeed

RequireOne — Any one succeeds

failurePolicy

RequireAll — All must fail

RequireOne — Any one fails

🎭 Decorator Nodes 🎭 Nodes Decorator 🎭 Nodos Decorator 🎭 装饰节点

Decorator nodes wrap a single child and modify its behavior or result. Les nodes decorator enveloppent un seul enfant et modifient son comportement ou résultat. Los nodos decorator envuelven un solo hijo y modifican su comportamiento o resultado. 装饰节点包装单个子节点并修改其行为或结果。

!

Inverter

Decorator/Inverter

Inverts the child's result. Success → Failure, Failure → Success. Running passes through unchanged. Inverse le résultat de l'enfant. Success → Failure, Failure → Success. Running passe inchangé. Invierte el resultado del hijo. Success → Failure, Failure → Success. Running pasa sin cambios. 反转子节点的结果。Success → FailureFailure → Success。Running 保持不变。

// Example: [Inverter] → [CanSeePlayer?] = "Can NOT see player"
🔒

Blackboard Condition

Decorator/Blackboard Condition

Executes the child node only if a Blackboard condition is met. Supports Bool, Int, Float, String, and null checks. Exécute l'enfant seulement si une condition du Blackboard est remplie. Supporte Bool, Int, Float, String et vérification null. Ejecuta el hijo solo si una condición del Blackboard se cumple. Soporta Bool, Int, Float, String y verificación null. 仅在满足 Blackboard 条件时执行子节点。支持 Bool、Int、Float、String 和 null 检查。

Parameters Paramètres Parámetros 参数

  • key — Blackboard key to check
  • conditionType — Bool, Int, Float, String, ObjectNullCheck
  • comparison — Equal, NotEqual, Greater, Less, ≥, ≤

⚡ Action Nodes ⚡ Nodes Action ⚡ Nodos Action ⚡ 动作节点

Action nodes are leaf nodes that perform actual work. They don't have children. Les nodes action sont des feuilles qui effectuent le travail réel. Ils n'ont pas d'enfants. Los nodos action son hojas que realizan trabajo real. No tienen hijos. 动作节点是执行实际工作的叶节点。它们没有子节点。

Wait

Action/Wait

Waits for a specified duration. Returns Running until the time elapses, then Success. Attend pendant une durée spécifiée. Retourne Running jusqu'à la fin, puis Success. Espera durante una duración especificada. Retorna Running hasta que pasa el tiempo, luego Success. 等待指定的时间。在时间结束前返回 Running,然后返回 Success

duration (BBFloat) — Seconds to wait

randomVariation (BBFloat) — ± random offset

📝

Log

Action/Log

Logs a message to the Unity Console. Useful for debugging. Returns Success immediately. Affiche un message dans la Console Unity. Utile pour le débogage. Retourne Success immédiatement. Registra un mensaje en la Consola de Unity. Útil para depuración. Retorna Success inmediatamente. 在 Unity 控制台中记录消息。对调试很有用。立即返回 Success

message (BBString) — Message to log

logType (enum) — Info, Warning, Error

✏️

Set Value

Blackboard/Set Value

Sets a value in the Blackboard. Supports Bool, Int, Float, String, Vector2, Vector3, Color, GameObject. Définit une valeur dans le Blackboard. Supporte Bool, Int, Float, String, Vector2, Vector3, Color, GameObject. Establece un valor en el Blackboard. Soporta Bool, Int, Float, String, Vector2, Vector3, Color, GameObject. 在 Blackboard 中设置值。支持 Bool、Int、Float、String、Vector2、Vector3、Color、GameObject。

targetKey (string) — Key to set

valueType (enum) — Type of value

🗑️

Clear Key

Blackboard/Clear Key

Removes a key completely from the Blackboard. Can also clear all keys at once. Supprime complètement une clé du Blackboard. Peut aussi tout effacer d'un coup. Elimina una clave completamente del Blackboard. También puede borrar todas las claves. 从 Blackboard 中完全删除一个键。也可以一次清除所有键。

clearAll (bool) — Clear everything

key (string) — Key to remove

Reset Key

Blackboard/Reset Key

Resets a Blackboard key to its initial/default value. Can reset all keys at once. Réinitialise une clé du Blackboard à sa valeur par défaut. Peut tout réinitialiser. Restablece una clave del Blackboard a su valor inicial/predeterminado. Puede restablecer todo. 将 Blackboard 键重置为其初始/默认值。可以一次重置所有键。

resetAll (bool) — Reset everything

key (string) — Key to reset

📍

Copy Transform To Position

Blackboard/Copy Transform To Position

Copies a Transform's position to a Vector3 key in the Blackboard. Copie la position d'un Transform vers une clé Vector3 du Blackboard. Copia la posición de un Transform a una clave Vector3 en el Blackboard. 将 Transform 的位置复制到 Blackboard 中的 Vector3 键。

sourceTransform (BBTransform)

destinationPositionKey (BBString)

❓ Condition Nodes ❓ Nodes Condition ❓ Nodos Condition ❓ 条件节点

Condition nodes check a state and return Success (true) or Failure (false). They never return Running. Les nodes condition vérifient un état et retournent Success (vrai) ou Failure (faux). Ils ne retournent jamais Running. Los nodos condition verifican un estado y retornan Success (verdadero) o Failure (falso). Nunca retornan Running. 条件节点检查状态并返回 Success(真)或 Failure(假)。它们永远不会返回 Running。

Blackboard Check

Condition/Blackboard Check

Checks a boolean value in the Blackboard. Returns Success if true, Failure if false. Vérifie une valeur booléenne dans le Blackboard. Retourne Success si vrai, Failure si faux. Verifica un valor booleano en el Blackboard. Retorna Success si es verdadero, Failure si es falso. 检查 Blackboard 中的布尔值。如果为真返回 Success,否则返回 Failure。

condition (BBBool) — Boolean to check

invert (bool) — Invert the result

⚖️

Compare Keys

Blackboard/Compare Keys

Compares two values directly from the Blackboard. Supports Float, Int, Bool, String comparisons. Compare deux valeurs directement depuis le Blackboard. Supporte les comparaisons Float, Int, Bool, String. Compara dos valores directamente del Blackboard. Soporta comparaciones Float, Int, Bool, String. 直接从 Blackboard 比较两个值。支持 Float、Int、Bool、String 比较。

keyA, keyB (string) — Keys to compare

operation (enum) — ==, ≠, >, <, ≥, ≤

🔨 Custom Nodes 🔨 Nodes Personnalisés 🔨 Nodos Personalizados 🔨 自定义节点

Action Node Template

using TreeFlow.Runtime;
using TreeFlow.Runtime.Core;
using UnityEngine;

// 1. Add NodeInfo attribute to appear in the search menu
[NodeInfo("MyCategory", "MyNodeName", "Description of what it does")]
public class MyCustomAction : ActionNode
{
    // 2. Define parameters (use BB types for flexibility)
    public BBFloat speed = new BBFloat { value = 5f };
    public BBTransform target;

    // 3. Initialize (called once when tree starts)
    protected override void OnStart()
    {
        // Cache components, setup variables
    }

    // 4. Update (called every tick)
    protected override NodeStatus OnUpdate()
    {
        // Return Success, Failure, or Running
        return NodeStatus.Success;
    }

    // 5. Stop (called when node ends or is aborted)
    protected override void OnStop()
    {
        // Cleanup
    }
}

⚙️ Runtime Control ⚙️ Contrôle Runtime ⚙️ Control en Runtime ⚙️ 运行时控制

BehaviorTreeRunner

The main component that executes the tree. Le composant principal qui exécute l'arbre. El componente principal que ejecuta el árbol. 执行树的主要组件。

  • runner.tree
  • runner.updateInterval
  • runner.SetBehaviorTree(tree)
  • runner.Blackboard

Blackboard API

Access data from scripts. Accéder aux données depuis des scripts. Acceder a datos desde scripts. 从脚本访问数据。

// Set
runner.Blackboard.SetValue("Health", 100f);

// Get
float hp = runner.Blackboard.GetValue<float>("Health");

// Event
runner.Blackboard.OnValueChanged += (key, val) => { ... };

🎮 Examples 🎮 Exemples 🎮 Ejemplos 🎮 示例

Simple Enemy AI IA Ennemi Simple IA Enemigo Simple 简单敌人AI

Logic: If the enemy sees the player, chase them. Otherwise, patrol. Logique : Si l'ennemi voit le joueur, il le chasse. Sinon, il patrouille. Lógica: Si el enemigo ve al jugador, lo persigue. Si no, patrulla. 逻辑:如果敌人看到玩家,则追逐。否则,巡逻。

  • Selector (Root)
  • Sequence (Combat) -> Condition (CanSeePlayer) -> Action (Chase)
  • Sequence (Patrol) -> Action (MoveToWaypoint) -> Action (Wait)
[Root Selector]
 ├── [Sequence: Combat]
 │    ├── [Cond: CanSeePlayer?]
 │    └── [Action: ChasePlayer]
 └── [Sequence: Patrol]
      ├── [Action: GetNextWaypoint]
      ├── [Action: MoveTo]
      └── [Action: Wait 2s]

✨ Best Practices ✨ Bonnes Pratiques ✨ Buenas Prácticas ✨ 最佳实践

Do

  • Use BBParameters for reusable nodes. Utilisez des BBParameters pour des nodes réutilisables. Usa BBParameters para nodos reutilizables. 使用 BBParameters 以创建可重用节点。
  • Cache components in OnStart, not OnUpdate. Cachez les composants dans OnStart, pas OnUpdate. Caché de componentes en OnStart, no en OnUpdate. OnStart 中缓存组件,而不是 OnUpdate
  • Use Scene Overrides for scene references. Utilisez Scene Overrides pour les références de scène. Usa Scene Overrides para referencias de escena. 使用 Scene Overrides 进行场景引用。

Don't

  • Don't perform GetComponent every frame. Ne faites pas de GetComponent à chaque frame. No hagas GetComponent cada frame. 不要每帧都执行 GetComponent
  • Don't hardcode values; expose them. Ne codez pas les valeurs en dur ; exposez-les. No codifiques valores fijos; exponlos. 不要硬编码值;将它们暴露出来。
  • Don't make huge monolithic trees; use sub-trees (future feature). Ne faites pas d'arbres monolithiques énormes. No hagas árboles monolíticos enormes. 不要制作巨大的单体树。

🔧 Troubleshooting 🔧 Dépannage 🔧 Solución de problemas 🔧 故障排除

My Tree is not running Mon arbre ne s'exécute pas Mi árbol no se ejecuta 我的树没有运行
Check if BehaviorTreeRunner is enabled and has a valid Tree asset assigned. Make sure the Root node is connected. Vérifiez si BehaviorTreeRunner est activé et a un asset Tree valide. Assurez-vous que le Root est connecté. Verifica si BehaviorTreeRunner está habilitado y tiene un asset Tree válido. Asegúrate de que el Root esté conectado. 检查 BehaviorTreeRunner 是否已启用并分配了有效的树资源。确保Root节点已连接。
Blackboard value is null La valeur Blackboard est null El valor del Blackboard es null Blackboard值为null
If it's a Scene object (Transform, GameObject), did you set it in Scene Overrides? ScriptableObjects cannot reference scene objects directly. Si c'est un objet de Scène (Transform, GameObject), l'avez-vous mis dans Scene Overrides ? Les ScriptableObjects ne peuvent pas référencer la scène directement. Si es un objeto de Escena, ¿lo configuraste en Scene Overrides? Los ScriptableObjects no pueden referenciar la escena directamente. 如果是场景对象(Transform,GameObject),您是否在 Scene Overrides 中设置了它?ScriptableObjects不能直接引用场景对象。