虚幻4AI行为控制采用事件驱动模式,需由行为树和黑板配合使用的,行为树执行AI逻辑,黑板通过黑板变量来存储AI数据,
黑板变量的改变事件驱动AI行为树的逻辑执行。
一、控制器-行为树关联:
每个AI都有自己的控制器(AIController),AI控制器上有两个组件负责其行为:行为树组件BehaviorTreeComponent和黑板组件BlackboardComponent,当AI生成时,会在Controller上初始化这两个组件,执行AI行为树。
另外,当前世界所有AI的行为树都由世界的AI系统里的BehaviorTreeManager来管理,BehaviorTreeManager有一个数组ActiveComponents存放世界中所有激活的行为树。
AI人物出生时会生成controller,在controller中初始化黑板和行为树(AAIController::RunBehaviorTree()),当BehaviorTreeComponent执行StartTree()方法时,会将此行为树添加到BehaviorTreeManager的行为树数组里:
![BehaviorTreeComponent::ProcessPendingInitialize():](https://i-blog.csdnimg.cn/blog_migrate/e39a156022efaa7330e661d7c4b85f86.png)
行为树在被添加到Manager的数组中后,BehaviorTreeManager会从根节点按递归方式深度优先遍历整个行为树,初始化该行为树的所有node节点(BehaviorTreeManager::LoadTree),Manager对行为树节点的初始化工作主要为:
1)设置每个节点的父节点;
2)设置每个节点的执行顺序索引;
3)设置每个节点的下一执行节点;
4)设置每个节点在行为树中的深度;
5)设置每个节点数据所占的内存大小。
这样每个节点初始化并互相关联后,整个行为树也完成了初始化。
二、行为树节点设计:
下图为虚幻4行为树节点的UML图:
(一)BTNode:
UBTNode类是抽象类,为所有行为节点类的基类,主要有以下属性:
1)ParentNode--父节点;
2)NextExecutionNode--该节点在行为树中的下一执行节点;
3)ExecutionIndex --执行序号(深度优先);
4