AI的处理过程可以分为三大阶段:感知、思考、行动
AI利用感知阶段收集到的信息,对当前信息和目标进行评估,为之后的行动指明方向。
快捷键P可以切换导航网格是否显示
AI的移动范围,在放置模式下体积中有一个导航网格边界体积,把他拉到场景中形成一个线框,对其缩放形成AI移动范围
导航网格分为静态和动态
导航网格的静态和动态设置:关卡编辑器中设置——项目设置——导航网格体——运行时——运行时生成(默认静态),采用动态的方式则实时计算,更加符合智能调整;
创建导航网格体时,Recast导航网格体自动创建。
选中RecastNavMesh,在细节面板调整。
导航修改器体积(Nav Modifer Volume) - 不会生成任何几何体。
导航网格体障碍 - 表现某片区域难通过。AI不会优先选择这个路径。不会移除导航网格体。
NavArea_Null - 移除导航网格体,无法通过。
NavArea_LowHeight - 在高度不足的地方使用。无法通过。
NavArea_Default - 可以通过。
Get Blackboard:获取黑板
Set Value as ...(...为值的类型) :通过赋值的方式获取黑板中的变量值
Make Literal Name:为那个值赋值(value中时变量名)
运行行为树
Run Behavior Tree:运行行为树(BTAsset:运行哪一个行为树)
控制并显示AI的决策制定过程
行为树要与黑板一同使用,绑定黑板。
合成是AI执行分支的根。不会像叶节点那样执行,但能创建一个结构,并根据其子节点的成败控制顺序。
Task: 行为树具体的执行节点, 可以理解为一个角色当前的动作,可以执行一帧就返回,也可以持续一段时间
任务状态 :成功、失败、执行。(无论失败与否,都会执行下一个节点。顺序从左到右。)
按New Task后自定义任务,自定义任务的事件
完成任务(必需要有这个节点,否则会卡在当前任务,无法继续执行下去)
设置变量
装饰器: 可以理解为Task的条件判断,条件为true才会执行Task
添加装饰器
装饰器相当于if,满足条件执行一个任务,不满足条件执行另一个任务
可以理解为和节点进行绑定,当执行这个节点下的状态时,这个服务会以一定频率一直运行
重载函数执行顺序:节点上挂有循环的装饰器
当执行到当前服务节点时,执行顺序
----- 先执行事件接收搜索开始AI
----- 再执行事件接收启用AI
---- Loop过程中会执行事件事件接收搜索开始AI
----- 结束节点会执行事件接收停用AI
任务和合成可以创建出各种方法来处理AI的行为。
不必纠结如何完成任务,只需制定决策完成任务即可。
属性
BlackBoard:黑板中的变量是否发生变化
Composite:组合多个布尔值
Cooldown:等5s后在执行
可以看做是行为树的创建一些公有变量,外部可以修改行为树黑板的变量值,达到修改行为树状态的逻辑
黑板中创建变量
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),创建后放置在场景中
在蓝图中通过“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两种,要让射线检测能识别到这个碰撞到的物体,则在待检测物体细节面板碰撞部分开启对应通道,因此要把对应待检测物体相关通道设置为阻挡与射线检测通道一致,就可以进行射线检测识别了
}
设置一个装饰器变量