UE4AI(行为树)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AlenCzf/article/details/54613829

AI的生成方式比较多,单纯用蓝图也可以构成复杂的AI,而行为树算是AI的规范化,也比较直观明朗,因此这里主要讲解行为树的使用,先说一下其中几个简单的概念。

AIController->和playcontroller一样,只不过AIController负责管理的是AI,也称AI控制器。

Blackboard->黑板,就跟以前上学时用的黑板一样,他的作用就是用来标记关键值,为AI存储或者提取相关记忆。

Behavior Tree->行为树,从黑板里读取关键值,做出决定和执行。

Animation BluePrints->动画蓝图 配合行为树调用,之后详细讲。

Task->任务 

Services ->常用于检查和更新黑板.

(注:假如你使用的是C++来创建任务服务的话,记得给黑板数据做初始化,这样在C++上做数据类型的判断之类的才不会为空,导致判断失误,如图:)

NavMeshBoundsVolume->导航

就选官方的第三人称模板吧,逻辑为随机选取目标点进行移动。

第一步,拉出NavMeshBoundsVolume,导航网格,按下P键可以看到场景变成绿色,证明构建成功,图示中的LinkeProxy表示连接跳跃,Modifier表示修正,具体用法可以自己实验。

第二步,创建AIPawn,AIController以及行为树和黑板,任务Task等,(Task的创建是由蓝图继承Task类创建的,其他的右键创建)为了方便我把文件放一起。

在AIController跑起行为树,并将自己创建的AIController替换到要执行的AI上。

黑板里面增加一个变量TargetLoc,用来储存AI移动的目标坐标,这里就只做AI随机行走。

Task(Idle)里面的设置,蓝图如图内解释,记得最后要执行完成函数,变量Idle是用来储存要移动的目标点坐标,储存进黑板里刚刚设置的变量TargetLoc,在行为树里用来给其他函数进行调用。

关于行为树里面的设置

这里说下两个节点

Selector 从左到右在其子项中运行,直到其中一个成功才返回。

Sequence 从左到右在其子项中运行,直到其中一个失败返回。

这样行为树的意思就是执行下来从左往右,先Idle执行随机目标点的储存,然后等待5S,接着进行MoveTo移动,MoveTo函数的坐标点调用使用的就是黑板里刚存储的TargetLoc

行为树里也封装了许多有用的函数,包括EQS环境查询也可以在这里使用,我个人的习惯是在AIPlayControl类更新状态,行为树开一个任务时刻进行查询和标记更新,再执行逻辑任务。

顺便附上刚好开着的某个项目的AI行为树片段:

作用逻辑为:判断当下是否为攻击状态,如果不是,进入如图分支,并从左往右执行,左边第一个先执行随机状态,因为selector执行完一个后必然会重新轮回,所以会回到上一步,读取当前随机状态为何,从而再进入对应的分支任务中,当分支任务完成时,标记为finish状态,再回到第一个,重新随机AI状态,如此循环。

简单的Demo完成了,接着就去场景跑吧。

猜你喜欢

转载自blog.csdn.net/AlenCzf/article/details/54613829