Unreal Engine:行为树
一、创建相关蓝图
Character:AI角色
Animation:AI动画
AIController:AI控制器
BehaviorTree:行为树
BlackBoard:黑板
在Character里绑定网格体、动画、Pawn:AI控制器
=======================基础========================
-
选择器(Selector):
- 选择器是一个有多个子节点的组合节点。
- 选择器从左到右依次遍历其子节点,一旦找到一个成功(返回成功状态)的子节点,它就会停止遍历并返回成功状态。
- 如果所有子节点都返回失败状态,选择器将返回失败状态。
- 选择器通常用于实现多个可能的行为之一的选择,只要有一个子节点成功,就会执行相应的行为。
-
序列器(Sequence):
- 序列器也是一个有多个子节点的组合节点。
- 序列器从左到右依次遍历其子节点,只有当所有子节点都成功才会返回成功状态。
- 如果其中一个子节点返回失败状态,序列器将停止遍历并返回失败状态。
- 序列器通常用于实现一系列行为按照顺序执行的情况,只有当所有行为都成功才会执行下一个行为。
Flow:
tick检查节点运行结果,有三种结果:成果、失败、运行中。还在运行中就下一个tick再检查。
====================实例======================
A. 一个简单的实现:在圆内随机移动
在Character事件图表:
在场景内创建导航网格体,按P可以查看可移动区域
B. 用行为树控制移动到随机地点,等待2s,再移动
1. 黑板中创建变量TargetPoint,向量类型,用来存储随机出来的目标点
2. 行为树中创建相关逻辑:
3. 其中的任务:FIndMoveTarget逻辑,这一步将随机生成的位置存进了黑板中
MoveTo和Wait是自带的
4. MoveTo要从黑板中读取目标点
5. 在AIController中设置开始时运行该行为树逻辑
C. 实现NPC自由移动,看到玩家后跑向玩家,玩家离开视线跑到玩家最后视线内位置,然后恢复自由移动(视觉感知)
AI控制器:添加AI感知组件,在细节面板配置感官
行为树逻辑:
黑板存储了玩家角色和玩家上一次出现在视线内的位置
AI控制器逻辑:函数输入参数(Actor、AI刺激物)