一个功能强大的 Unity 行为树编辑器插件,提供可视化节点编辑和运行时执行系统。
- 可视化节点编辑器 - 直观的图形界面,支持拖拽和连接节点
- 自动布局 - 智能从左到右的节点自动排列
- 丰富的节点类型 - 支持 Action、Composite、Decorator、Condition 等节点
- 黑板系统 - 灵活的数据共享机制,支持多种数据类型
- 运行时执行 - 通过 BehaviorTreeRunner 组件轻松集成到游戏对象
- 推荐 Unity 6000.3 以上
- .NET Standard 2.1
- 打开 Unity 编辑器
- 菜单栏选择
Window > Package Manager - 点击左上角
+按钮,选择Add package from git URL... - 输入以下地址:
https://github.com/Furry-Monster/MonsterBT.git?path=Assets/MonsterBT
- 点击
Add等待安装完成
如果需要安装特定版本,可以在 URL 后添加版本标签:
https://github.com/Furry-Monster/MonsterBT.git?path=Assets/MonsterBT#v1.0.0
直接编辑项目的 Packages/manifest.json 文件,在 dependencies 中添加:
{
"dependencies": {
"com.furry-monster.monsterbt": "https://github.com/Furry-Monster/MonsterBT.git?path=Assets/MonsterBT",
...
}
}- 下载本仓库的 ZIP 文件或克隆仓库
- 将
Assets/MonsterBT文件夹复制到你项目的Assets目录下
在 Unity 编辑器中:
- 右键点击 Project 窗口
- 选择
Create > MonsterBT > BehaviorTree - 双击创建的资源文件打开编辑器窗口
或通过菜单:Window > MonsterBT > BehaviorTree
在行为树编辑器中:
- 添加节点:从节点库中拖拽节点到画布
- 连接节点:拖拽节点的输出端口到目标节点的输入端口
- 自动布局:点击工具栏的 "Auto Layout" 按钮自动排列节点
- 编辑属性:选中节点后在检查器中修改属性
在场景中:
- 选择要运行行为树的 GameObject
- 添加
BehaviorTreeRunner组件 - 将创建的行为树资源拖拽到
Behavior Tree Asset字段 - 运行游戏,行为树将自动执行
- Sequence - 顺序执行所有子节点,任一失败则返回失败
- Selector - 顺序执行子节点,任一成功则返回成功
- Parallel - 并行执行所有子节点
- Random - 随机选择一个子节点执行
- Inverter - 反转子节点的返回结果
- Repeater - 重复执行子节点指定次数
- Until - 持续执行子节点直到满足条件
- ForceReturn - 强制返回指定状态
内置动作节点包括:
- DebugLogAction - 输出调试日志
- WaitAction - 等待指定时间
- SetBlackboardValue - 设置黑板值
- PlayAnimationAction - 播放动画
- SetAnimatorParameterAction - 设置动画器参数
- WaitForAnimationAction - 等待动画完成
- MoveToPositionNavMeshAction - 使用 NavMesh 移动到指定位置
- MoveToTargetNavMeshAction - 使用 NavMesh 移动到目标对象
- SetNavMeshDestinationAction - 设置 NavMesh 目标点
条件节点用于检查特定条件,返回 Success 或 Failure。
黑板(Blackboard)用于在节点之间共享数据。支持的数据类型:
bool- 布尔值float- 浮点数string- 字符串Vector3- 三维向量GameObject- 游戏对象引用Transform- 变换组件引用
// 在节点中访问黑板
var target = blackboard.GetGameObject("Target");
var health = blackboard.GetFloat("Health");
// 设置黑板值
blackboard.SetBool("IsChasing", true);
blackboard.SetVector3("TargetPosition", targetPosition);BehaviorTreeRunner 是运行时执行行为树的组件,主要属性:
- Behavior Tree Asset - 要执行的行为树资源
- Run On Start - 是否在 Start 时自动运行
- Loop - 是否循环执行
- Debug Mode - 是否启用调试模式
var runner = GetComponent<BehaviorTreeRunner>();
// 启动行为树
runner.StartTree();
// 停止行为树
runner.StopTree();
// 重启行为树
runner.RestartTree();using MonsterBT.Runtime;
using UnityEngine;
[CreateAssetMenu(menuName = "MonsterBT/Actions/MyCustomAction")]
public class MyCustomAction : ActionNode
{
[SerializeField] private float duration = 1f;
protected override void OnStart()
{
// 节点开始时的逻辑
}
protected override BTNodeState OnUpdate()
{
// 每帧执行的逻辑
// 返回 Running、Success 或 Failure
return BTNodeState.Success;
}
protected override void OnStop()
{
// 节点结束时的清理逻辑
}
}using MonsterBT.Runtime;
using UnityEngine;
[CreateAssetMenu(menuName = "MonsterBT/Conditions/MyCustomCondition")]
public class MyCustomCondition : ConditionNode
{
protected override bool IsConditionMet()
{
// 检查条件,返回 true 或 false
return true;
}
}Assets/MonsterBT/
├── Runtime/ # 运行时代码
│ ├── Actions/ # 动作节点
│ ├── Composite/ # 组合节点
│ ├── Decorator/ # 装饰节点
│ ├── Conditions/ # 条件节点
│ └── Utils/ # 工具类
├── Editor/ # 编辑器代码
│ ├── Service/ # 服务层
│ │ ├── Layout/ # 布局服务
│ │ ├── Operation/ # 操作服务
│ │ └── Asset/ # 资源管理
│ └── View/ # 视图层
│ ├── Graph/ # 图形视图
│ └── Sidebar/ # 侧边栏
└── Examples/ # 示例场景和资源
项目包含示例场景和资源,位于 Assets/MonsterBT/Examples/ 目录下。可以参考这些示例了解如何使用各种节点类型。
MIT License
Copyright (c) 2025 Furry-Monster
欢迎提交 Issue 和 Pull Request!
