UE4-AI

AI的三大阶段

AI的处理过程可以分为三大阶段:感知、思考、行动

感知

  • 对AI当前状态作记录。
  • “基本过滤”也是一种感知行为。
  • 基本过滤 - 如果其他感知的优先级更高,会忽略部分信息

思考

AI利用感知阶段收集到的信息,对当前信息和目标进行评估,为之后的行动指明方向。

行动

  • 根据感知阶段的信息和思考阶段的决策,AI在行动阶段对信息做出相应的行为。
  • 行动阶段结束后,AI会再次回到感知阶段。
  • 行为有可见的,如跳跑;也有不可见的,如通信

 导航网格

创建

快捷键P可以切换导航网格是否显示  

导航网格的介绍

AI的移动范围,在放置模式下体积中有一个导航网格边界体积,把他拉到场景中形成一个线框,对其缩放形成AI移动范围

导航网格分为静态和动态

  • 静态:游戏运行之前就以及计算好了,导航网格的面积
  • 动态:游戏运行时,实时计算导航网格的面积 

导航网格的静态和动态设置:关卡编辑器中设置——项目设置——导航网格体——运行时——运行时生成(默认静态),采用动态的方式则实时计算,更加符合智能调整; 

 

使用RecastNavMesh调整寻路网格体部分属性 

创建导航网格体时,Recast导航网格体自动创建。
选中RecastNavMesh,在细节面板调整。

  • 绘制偏移 - 抬升或降低寻路网格体。不会改变网格体实际位置,只是改变视觉效果。(对被遮挡的区域显示很有帮助)
    默认为10。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

导航修改器体积(Nav Modifer Volume) - 不会生成任何几何体。

在这里插入图片描述
在这里插入图片描述

导航网格体障碍 - 表现某片区域难通过。AI不会优先选择这个路径。不会移除导航网格体。

在这里插入图片描述
NavArea_Null - 移除导航网格体,无法通过。

 在这里插入图片描述

NavArea_LowHeight - 在高度不足的地方使用。无法通过。

在这里插入图片描述
NavArea_Default - 可以通过。

 在这里插入图片描述

创建AIController

 让角色绑定控制器

获取黑板中的变量

Get Blackboard:获取黑板
Set Value as ...(...为值的类型) :通过赋值的方式获取黑板中的变量值
Make Literal Name:为那个值赋值(value中时变量名)

作用 

运行行为树
Run Behavior Tree:运行行为树(BTAsset:运行哪一个行为树)

 行为树(与黑板一起使用)

控制并显示AI的决策制定过程

创建

行为树要与黑板一同使用,绑定黑板。 

行为树结构

  • 行为树:是一种将AI在场景中决策制定模型可视化的方法。
    • 观察行为树的可视化结构,可以清晰地了解行为树的执行方式和执行顺序,而不必了解每个节点的具体工作方式。
    • 执行顺序 - 由行为树中各个节点的位置决定。从上到下,从左到右。
    • 树最终以task结尾。 

 合成

合成是AI执行分支的根。不会像叶节点那样执行,但能创建一个结构,并根据其子节点的成败控制顺序。

  • Selector:选择器合成 - 会执行它下面的子节点。
    • 试图选择最合适的任务 -子节点返回成功,选择器成功。所有子节点返回失败,选择器失败。(只要有一个任务成功,则成功。所有任务失败,则失败。)
    • 第一个分支返回false 则执行下一个分支,直到有一个分支返回true 这个Selector节点执行完毕
    • 可以把优先级最高的任务放在左边。
  • Squencer合成 - 序列合成节点会按照序列顺序遍历子节点,当且仅当所有子节点返回成功,它才成功。如果某个步骤执行失败,它失败。
    • 第一个分支返回true,则执行下一个分支,直到有一个分支返回false
  •  Simple Parallel:并行

任务节点

Task: 行为树具体的执行节点, 可以理解为一个角色当前的动作,可以执行一帧就返回,也可以持续一段时间

  • 行为树的一种节点,下面无法添加其他节点。
  • 是行为树分支的终点(但不是行为树的终点!)。
  • 也被成为“叶节点”

任务状态 :成功失败、执行。(无论失败与否,都会执行下一个节点。顺序从左到右。)

 按New Task后自定义任务,自定义任务的事件

 完成任务(必需要有这个节点,否则会卡在当前任务,无法继续执行下去)

设置变量

装饰器 

装饰器: 可以理解为Task的条件判断,条件为true才会执行Task 

添加装饰器 

装饰器相当于if,满足条件执行一个任务,不满足条件执行另一个任务 

  • 行为树的执行逻辑是从左向右,观察器中止,可以这样理解,
    • Self就是能打断自身
    • Lower Priority就是能打断右边的节点
    • Both是两者都有
  • 当执行第二个节点的时候,第一个节点的装饰器满足条件了,Lower Priority 就会打断第二个节点执行,执行自身,
  • 当执行第一个节点时,如果Actor结果改变时,Self就是打断当前的Task 从头开始播放,也就是RunEQSQuery
  • Both是两种情况都能打断

服务 

可以理解为和节点进行绑定,当执行这个节点下的状态时,这个服务会以一定频率一直运行 

 创建服务

 自定义服务(New Service)

重载函数执行顺序:节点上挂有循环的装饰器 

当执行到当前服务节点时,执行顺序

----- 先执行事件接收搜索开始AI

----- 再执行事件接收启用AI

---- Loop过程中会执行事件事件接收搜索开始AI

----- 结束节点会执行事件接收停用AI 

结合

任务和合成可以创建出各种方法来处理AI的行为。
不必纠结如何完成任务,只需制定决策完成任务即可。

 属性

 

BlackBoard:黑板中的变量是否发生变化 
Composite:组合多个布尔值
Cooldown:等5s后在执行

黑板(与行为树一起使用)

可以看做是行为树的创建一些公有变量,外部可以修改行为树黑板的变量值,达到修改行为树状态的逻辑 

创建

 黑板中创建变量

EQS环境查询系统

 EQS(Environment Query System) - 让AI能将多种环境因素考虑在内,要配合导航网格使用

 创建

 界面

 以Points :Circle举例:在查询着周围生成环形的物体{
Cricle Radius:环形半径
Space Between:每两个点之间的距离
Number Of Points:点的数量

}

效果图

 EQS进行测试
Disance:距离测试
Pathfinding:两者之间是否存在通路

 添加测试后

 具体属性
Test Purpose:测试目的(Filter Only:过滤,Score Only:打分)

Score EQuation:打分机制(Liner :离得越近分越低,Inverse Liner:离得越远分越高,Square:成平方趋势变化)

 

 创建EQS角色(用于测试EQS),创建后放置在场景中

 在测试角色中选择要测试那个EQS

 在蓝图中通过“Set Named Param”节点设置您添加的这个参数,它的目标是一个 EQS 实例引用,您可以从“Run EQSQuery”节点获取它。

行为树中关联EQS

 

实例

射线检测:LineTraceByChannel(由通道检测线条){

Start: 起始点(玩家摄像机世界坐标)(First Person Camera+GetWorldLocation)
End:终点:getforwardvector获得向前向量*距离+当前位置(GetWorldLocation)=终点位置
Draw Debug Type:是否可以看到射出的射线(可选项为None无,For One Farme一帧一条,For During 持续时间保留,在展开位置设置时间)
Actors to Ignore:忽略的对象
Trace Channel:在节点中有Visibility和Camare两种,要让射线检测能识别到这个碰撞到的物体,则在待检测物体细节面板碰撞部分开启对应通道,因此要把对应待检测物体相关通道设置为阻挡与射线检测通道一致,就可以进行射线检测识别了

}


 Make Arry:创建一个数组

 设置一个装饰器变量

 

 

用EQS随机找点

猜你喜欢

转载自blog.csdn.net/qq_52825422/article/details/126461477
今日推荐