行为树系统
行为树(Behavior Tree)是一种用于游戏AI和自动化控制的强大工具。本框架提供了完全ECS化的行为树系统,所有节点都是实体和组件,充分利用了ECS的性能优势。
什么是行为树?
行为树是一种层次化的任务执行结构,由多个节点组成,每个节点负责特定的任务。行为树特别适合于:
- 游戏AI(敌人、NPC行为)
- 状态机的替代方案
- 复杂的决策逻辑
- 可视化的行为设计
核心特性
完全ECS化
- 所有节点都是实体(Entity)
- 节点属性存储在组件(Component)中
- 利用ECS的缓存友好特性
- 支持大规模AI实例
可视化编辑器
- 图形化节点编辑
- 实时预览和调试
- 拖拽式节点创建
- 支持子树复用
灵活的黑板系统
- 本地黑板(单个行为树)
- 全局黑板(所有行为树共享)
- 类型安全的变量访问
- 支持多种数据类型
强大的序列化
- JSON格式(可读性好)
- 二进制格式(体积小60-70%)
- 跨平台兼容
- 支持格式转换
引擎集成
- Cocos Creator 支持
- Laya 引擎支持
- 纯TypeScript实现
- 易于扩展到其他引擎
文档导航
入门教程
编辑器使用
引擎集成
- Cocos Creator 集成 - 在 Cocos Creator 中使用行为树
- Laya 引擎集成 - 在 Laya 中使用行为树
高级主题
快速示例
代码方式创建
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);编辑器方式创建
- 打开行为树编辑器
- 创建新的行为树资产
- 拖拽节点到画布
- 配置节点属性
- 保存并导出
- 在代码中加载使用
typescript
// 加载编辑器创建的行为树
const asset = await loadBehaviorTree('enemy-ai.btree.json');
const ai = BehaviorTreeAssetLoader.instantiate(asset, scene);
BehaviorTreeStarter.start(ai);下一步
建议按照以下顺序学习: