Skip to content

行为树系统

行为树(Behavior Tree)是一种用于游戏AI和自动化控制的强大工具。本框架提供了完全ECS化的行为树系统,所有节点都是实体和组件,充分利用了ECS的性能优势。

什么是行为树?

行为树是一种层次化的任务执行结构,由多个节点组成,每个节点负责特定的任务。行为树特别适合于:

  • 游戏AI(敌人、NPC行为)
  • 状态机的替代方案
  • 复杂的决策逻辑
  • 可视化的行为设计

核心特性

完全ECS化

  • 所有节点都是实体(Entity)
  • 节点属性存储在组件(Component)中
  • 利用ECS的缓存友好特性
  • 支持大规模AI实例

可视化编辑器

  • 图形化节点编辑
  • 实时预览和调试
  • 拖拽式节点创建
  • 支持子树复用

灵活的黑板系统

  • 本地黑板(单个行为树)
  • 全局黑板(所有行为树共享)
  • 类型安全的变量访问
  • 支持多种数据类型

强大的序列化

  • JSON格式(可读性好)
  • 二进制格式(体积小60-70%)
  • 跨平台兼容
  • 支持格式转换

引擎集成

  • Cocos Creator 支持
  • Laya 引擎支持
  • 纯TypeScript实现
  • 易于扩展到其他引擎

文档导航

入门教程

编辑器使用

引擎集成

高级主题

快速示例

代码方式创建

typescript
import { Scene } from '@esengine/ecs-framework';
import {
    BehaviorTreeBuilder,
    BehaviorTreeStarter,
    BlackboardValueType,
    TaskStatus
} from '@esengine/behavior-tree';

const scene = new Scene();

// 创建敌人AI
const enemyAI = BehaviorTreeBuilder.create(scene, 'EnemyAI')
    .blackboard()
        .defineVariable('health', BlackboardValueType.Number, 100)
        .defineVariable('target', BlackboardValueType.Object, null)
    .endBlackboard()
    .selector('MainBehavior')
        // 如果生命值高,则攻击
        .sequence('AttackBranch')
            .compareBlackboardValue('health', CompareOperator.Greater, 50)
            .action('Attack', () => {
                console.log('Attacking player');
                return TaskStatus.Success;
            })
        .end()
        // 否则逃跑
        .action('Flee', () => {
            console.log('Fleeing from battle');
            return TaskStatus.Success;
        })
    .end()
    .build();

// 启动AI
BehaviorTreeStarter.start(enemyAI);

编辑器方式创建

  1. 打开行为树编辑器
  2. 创建新的行为树资产
  3. 拖拽节点到画布
  4. 配置节点属性
  5. 保存并导出
  6. 在代码中加载使用
typescript
// 加载编辑器创建的行为树
const asset = await loadBehaviorTree('enemy-ai.btree.json');
const ai = BehaviorTreeAssetLoader.instantiate(asset, scene);
BehaviorTreeStarter.start(ai);

下一步

建议按照以下顺序学习:

  1. 阅读快速开始了解基础用法
  2. 学习核心概念理解行为树原理
  3. 尝试编辑器使用指南可视化创建行为树
  4. 根据你的引擎查看集成教程(CocosLaya
  5. 探索高级用法提升技能

获取帮助

Released under the MIT License.