146 lines
4.1 KiB
Markdown
146 lines
4.1 KiB
Markdown
|
|
# 行为树系统
|
|||
|
|
|
|||
|
|
行为树(Behavior Tree)是一种用于游戏AI和自动化控制的强大工具。本框架提供了完全ECS化的行为树系统,所有节点都是实体和组件,充分利用了ECS的性能优势。
|
|||
|
|
|
|||
|
|
## 什么是行为树?
|
|||
|
|
|
|||
|
|
行为树是一种层次化的任务执行结构,由多个节点组成,每个节点负责特定的任务。行为树特别适合于:
|
|||
|
|
|
|||
|
|
- 游戏AI(敌人、NPC行为)
|
|||
|
|
- 状态机的替代方案
|
|||
|
|
- 复杂的决策逻辑
|
|||
|
|
- 可视化的行为设计
|
|||
|
|
|
|||
|
|
## 核心特性
|
|||
|
|
|
|||
|
|
### 完全ECS化
|
|||
|
|
- 所有节点都是实体(Entity)
|
|||
|
|
- 节点属性存储在组件(Component)中
|
|||
|
|
- 利用ECS的缓存友好特性
|
|||
|
|
- 支持大规模AI实例
|
|||
|
|
|
|||
|
|
### 可视化编辑器
|
|||
|
|
- 图形化节点编辑
|
|||
|
|
- 实时预览和调试
|
|||
|
|
- 拖拽式节点创建
|
|||
|
|
- 支持子树复用
|
|||
|
|
|
|||
|
|
### 灵活的黑板系统
|
|||
|
|
- 本地黑板(单个行为树)
|
|||
|
|
- 全局黑板(所有行为树共享)
|
|||
|
|
- 类型安全的变量访问
|
|||
|
|
- 支持多种数据类型
|
|||
|
|
|
|||
|
|
### 强大的序列化
|
|||
|
|
- JSON格式(可读性好)
|
|||
|
|
- 二进制格式(体积小60-70%)
|
|||
|
|
- 跨平台兼容
|
|||
|
|
- 支持格式转换
|
|||
|
|
|
|||
|
|
### 引擎集成
|
|||
|
|
- Cocos Creator 支持
|
|||
|
|
- Laya 引擎支持
|
|||
|
|
- 纯TypeScript实现
|
|||
|
|
- 易于扩展到其他引擎
|
|||
|
|
|
|||
|
|
## 文档导航
|
|||
|
|
|
|||
|
|
### 入门教程
|
|||
|
|
|
|||
|
|
- **[快速开始](./getting-started.md)** - 5分钟上手行为树
|
|||
|
|
- **[核心概念](./core-concepts.md)** - 理解行为树的基本原理
|
|||
|
|
|
|||
|
|
### 编辑器使用
|
|||
|
|
|
|||
|
|
- **[编辑器使用指南](./editor-guide.md)** - 可视化创建行为树
|
|||
|
|
- **[节点参考](./node-reference.md)** - 所有内置节点的详细说明
|
|||
|
|
|
|||
|
|
### 引擎集成
|
|||
|
|
|
|||
|
|
- **[Cocos Creator 集成](./cocos-integration.md)** - 在 Cocos Creator 中使用行为树
|
|||
|
|
- **[Laya 引擎集成](./laya-integration.md)** - 在 Laya 中使用行为树
|
|||
|
|
|
|||
|
|
### 高级主题
|
|||
|
|
|
|||
|
|
- **[高级用法](./advanced-usage.md)** - 子树、异步加载、性能优化
|
|||
|
|
- **[自定义节点](./custom-nodes.md)** - 创建自定义行为节点
|
|||
|
|
- **[最佳实践](./best-practices.md)** - 行为树设计模式和技巧
|
|||
|
|
|
|||
|
|
### API参考
|
|||
|
|
|
|||
|
|
- **[API 文档](../../api/behavior-tree/README.md)** - 完整的API参考
|
|||
|
|
|
|||
|
|
## 快速示例
|
|||
|
|
|
|||
|
|
### 代码方式创建
|
|||
|
|
|
|||
|
|
```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. 阅读[快速开始](./getting-started.md)了解基础用法
|
|||
|
|
2. 学习[核心概念](./core-concepts.md)理解行为树原理
|
|||
|
|
3. 尝试[编辑器使用指南](./editor-guide.md)可视化创建行为树
|
|||
|
|
4. 根据你的引擎查看集成教程([Cocos](./cocos-integration.md) 或 [Laya](./laya-integration.md))
|
|||
|
|
5. 探索[高级用法](./advanced-usage.md)提升技能
|
|||
|
|
|
|||
|
|
## 获取帮助
|
|||
|
|
|
|||
|
|
- 查看 [示例项目](https://github.com/esengine/ecs-framework/tree/master/examples)
|
|||
|
|
- 提交 [Issue](https://github.com/esengine/ecs-framework/issues)
|
|||
|
|
- 加入社区讨论
|