初识行为树和黑板
2023年10月19日 2024年1月11日
说明
Behavior Tree / Blackboard
在控制器对游戏角色行为逻辑进行描述
数学建模, 直接 非循环 图表, 可能的行为作为节点
虚幻引擎提供行为树编辑器使数学模型可视化
行为树是游戏角色的大脑: 设置了一系列的规则, 迁移条件 Transition
, 和NPC状态
黑板作为数据库: 一系列变量, 当我们在代码中将其设置为不同值, 行为树会作出对应反应
创建行为树资产和黑板资产
Content/AI
右键, Artificial Intelligence > Behavior Tree
, 命名为BT_STUCharacter
右键, Artificial Intelligence > Blackboard
, 命名为BB_STUCharacter
介绍行为树资产
双击打开BT_STUCharacter, 对游戏角色行为逻辑进行配置
行为树由控制节点组成, 任务作为叶子节点; 任务即游戏角色的直接动作
初始只有一个根节点, 作为行为树的入口
第二层有三个选项
- | |
---|---|
Sequence | 按次序执行的多个任务序列 |
Selector | |
Simple Parallel |
第三层可以选任务
- | |
---|---|
MoveTo | 找到路径去到指定位置; MoveAITo的另一种表示 |
Wait | 游戏角色暂停指定秒数 |
MoveTo任务
在细节面板进行配置
Blackboard > Blackboard Key
: 决定世界座标系的某个位置, 或者游戏角色将要移动到的Actor
使用黑板资产
通过 New Key
按钮添加各种类型变量
添加两个 Vector
类型变量: Location1和Location2; 将在这两点间移动
配置行为树资产
-
点击图表的空白处会显示细节面板, 设置黑板资产
-
添加节点: Sequence
-
添加任务: MoveTo
选中MoveTo
节点, 可以在Details > Blackboard > Blackboard Key
看到刚刚添加的变量, 选择Location1作为目的地 -
添加任务: Wait; 设置秒数为2
-
添加任务: MoveTo; 选择Location2作为目的地
-
添加任务: Wait; 设置秒数为2
当前NPC逻辑: > 去到Location1 > 等待2s > 去到Location2 > 等待2s; 循环
行为树从上到下、从左到右顺序执行; 左边的优先级更高
任务具有执行状态: 是否成功完成; 成功则运行下一个任务, 否则中止
设置AIController
运行行为树
-
移除BP_STUAIController蓝图中的逻辑
-
添加节点: RunBehaviorTree; 在BeginPlay之后执行; 设置行为树资产
设置黑板中变量的位置值
-
在场景另一角添加Actor, 指示Location2
-
设置变量值: 对Location1和Location2进行设置
添加节点: GetBlackboard; 获取黑板指针
添加节点: SetValueAsVector; 对黑板中的变量进行设置
添加节点: MakeLiteralName; 给出变量名
-
根据两个指示Actor的座标, 填写到Location1和Location2
查看
保持行为树资产打开, 可以看见行为树逻辑执行的过程
按下 '
显示调试信息; 按下小写键盘的数字关闭 / 打开AI该类别调试信息
切换到NPC
Shift-F1
释放鼠标- 在世界大纲选中BP_STUAICharacter
- 按下
'
Active Task
: NPC当前执行的任务
设置AI调试信息相关热键
Hotkey
显示 / 关闭AI调试窗口 : Project Settings > Engine > Gameplay Debugger > Input > Activation Key
; 可以更换为F10
显示 / 关闭调试信息: Project Settings > Engine > Gameplay Debugger > Extensions > ToggleMessages
; 设置为Ctrl + Z; 原先和切换应用快捷键重复, 因而无法生效
释放鼠标
当运行模式为视口和新建编辑器窗口时, 可按下F8释放鼠标控制