UE4 AI 使用AIPerceptionComponent来编写视觉和听觉效果

之前一直是在行为树的Service节点里面,通过每帧计算AI与玩家的距离和计算看向角度之类的来达到视觉效果.前几个礼拜在Youtube上看了一个AI的教程才知道UE4居然自带了AIPerception这么强大的组件,先附上视频链接https://www.youtube.com/watch?v=DQqhJCoC4bQ

直接在添加组件里面搜索即可
在AI的Controller中添加它,观察右侧的Details细节面板,
SensesConfig就是我们要进行添加的感知类型.在这里插入图片描述
Sight config和Hearing config分别为视觉和听觉,分别添加.
在这里插入图片描述
几组参数中 SightRadius为视觉的半径,PeripheralVisionHalfAngleDegrees参数为视觉角度的一半.下面还有个Detection by Affiliation参数,决定了AI侦测的类型,一共有敌人、中立、盟友三种类型.油管主Ryan在视频中说好像Epic官方还没完善这个部分,所以要全部勾上,这一点非常重要,不然就侦测不到我们的玩家.一定要全部勾上
在我们的玩家蓝图中,添加一个AIPerceptionStimuliSource组件,将玩家作为刺激源在这里插入图片描述
在这里插入图片描述
右侧细节面板添加视觉和听觉两种刺激源.

然后可以将控制器绑定AI,进游戏先看看效果了.进游戏后按Enter键左边的’键,可以调出AIDebug模式.再按小键盘的数字键4,可以看到AI的感知.如果用的87键键盘可以使用WIN+R 输入osk运行虚拟键盘.在这里插入图片描述
在这个模式下还可以观察EQS等AI行为.
在这里插入图片描述
AI前方的锥形射线为AI的视觉,外面的很大的圆形射线为AI的听觉范围.射线的颜色可以在AIPerception的感知类型里面改DebugColor参数.
在AIPerception的细节面板中,添加自带的OnTargetPerceptionUpdated事件,也可以在蓝图中直接搜索.
在这里插入图片描述
输出的参数为侦测到的Actor,还有一个结构体.将结构体Break一下,可以获得各种位置,标签之类的,还有一个是否成功感应的布尔类型.在AI丢失对Actor的侦测时会变为false.这时将侦测到的Actor做一个类型转换就行了,转换成玩家蓝图类,转换成功即为成功侦测.
然后在Controller中,可以直接使用GetBlackboard节点来获取AI的黑板,再拖出来搜索SetAs,可以设置为你自己设置的黑板值.
在这里插入图片描述
这里就直接在黑板中添加布尔值,然后在Controller中用视觉侦测的布尔值来对它赋值了.在这里插入图片描述
这个节点还需要你添加黑板中对应值的名称,是一个UE4的FName类型,输入并选择MakeLiteralName然后改为相应的名称就行了.这样就达到了向黑板传值的效果,你也可以用来传递玩家位置之类的.
听觉效果的话,在玩家类或者你要用来产生噪音的类中添加一个Report Noise Event节点,通过碰撞啊,玩家脚步的动画通知之类的来触发.
有注释我就不进行解释了
然后在Controller中的AIPerception选择添加自带的OnPerceptionUpdated事件
在这里插入图片描述
将感应到的Actor进行遍历即可,之前报告噪音的Tag很重要,可以传递出来设置噪音的类型.之后再将噪音位置什么的传递给黑板中的Vector,让AI进行移动就行了.之前一直在Service中手写每帧不断计算与玩家之间的距离和看向夹角来做AI视觉,真的是很浪费性能也很浪费时间,UE4自带这么强大的组件也是刚刚才知道.不过好像没有找到调节检测频率的参数,也不知道是不是很浪费性能.与AIPerception相似的很简单的PawnSensing组件里可以调频率,但AIPerception里没找到.有了解的大神麻烦留言解答一下吧.

发布了2 篇原创文章 · 获赞 0 · 访问量 284

猜你喜欢

转载自blog.csdn.net/qq_42259378/article/details/102736275
今日推荐