UE4学习笔记(二)制作简单的AI

本教程需要在制作前,制作好玩家类。用系统自带的也是可以的。
我们本次要实现的功能是创建一个敌人,玩家进入其一定范围,就会追着玩家跑过去。如果玩家没有进入范围,则随机移动。
首先创建一个名叫【Enemy】的文件夹。然后【鼠标右键->蓝图类->角色】,命名为Enemy_BP。然后进入Enemy_BP资产面板,选中Mesh(继承),点击【添加组件】,为其增加一个圆柱体,当做敌人的身体,命名为body。
UE4学习笔记(二)制作简单的AI
然后退到内容浏览器,【右键->蓝图类->所有类中搜索“AIController”->选中之后点击选择按钮】,命名为Enemy_Controller。
UE4学习笔记(二)制作简单的AI
在Enemy_Controller的事件图表中,创建蓝图如下:
UE4学习笔记(二)制作简单的AI
我们能够看到,其中的BTAsset为空,所以我们得创建一个行为树。回到内容浏览器,【右键->人工智能->行为树】,命名Enemy_BT。同时创建一个用来为行为树传参的黑板,【右键 ->人工智能->黑板】,命名Enemy_BBD。创建完成的内容浏览器如下:
UE4学习笔记(二)制作简单的AI
进入Enemy_BBD资产面板,新建一个vector对象,命名为PlayerLocation,这是玩家位置。再新建一个vector变量,命名为RandomLocation,这是敌人随机移动到的位置。记得点击保存。
UE4学习笔记(二)制作简单的AI

进入Enemy_BT资产界面,在AI下的Behavior Tree下面,选择黑板资产,在其下拉菜单中,选中我们创建的Enemy_BBD.
UE4学习笔记(二)制作简单的AI
然后点击新建装饰器,基类为BTDecorator_BlueprintBase。
UE4学习笔记(二)制作简单的AI
这个选择,你们可能没有,因为这个是我提前建立过一次了。将新建的BTD文件,在内容浏览器中更名为ExitPlayer_BTD。
然后进入其中,在函数部分,点击【重载->执行条件检查AI】。
UE4学习笔记(二)制作简单的AI
然后新建一个【对象的多球体检测】,然后通过【获取Actor位置】获取自身的位置赋给Start,由于Start和End不能相同,所以加上一个1,赋给End,然后为Radius赋值800,这是设置检测求的大小,再将ObjectTypes提升为变量,然后在左边的变量栏中,改名为ObjectType,不用将其设为公开的(眼睛标识),出了点小错,懒得改了。
UE4学习笔记(二)制作简单的AI
然后编译一下,会出现一个报错,不用理会,在ObjectType中设置默认值,为Pawn。这个属性指定我们所要检测的对象的类,因为我们的玩家对象就是一个Pawn,所以选择Pawn。再度编译,没有报错。
UE4学习笔记(二)制作简单的AI
再创建一个【For Each Loop with Break】,连线如图,在【Array Element】中拉出一条线,选择【中断命中结果】。
UE4学习笔记(二)制作简单的AI
然后在弹出的框中,下拉选择【Hit Actor】,然后【类型转换为Player_BP】,Player_BP是我们的玩家类,意思就是只有玩家类,我们才会执行后续操作。在【For Each Loop with Break】的Conpleted连接【返回节点】,并将【Return Value】改为True。然后新建一个【将黑板值设为向量】,然后把【As Player BP】通过【获取Actor向量】转成向量赋给【Value】,为【Key】提升为变量,命名TargetLocation,设置为公开的。接着编译保存即可。
UE4学习笔记(二)制作简单的AI

然后进入Enemy_BT资产界面,先建一个【Sequence】顺序执行的意思,再建一个【Selector】相当于分支,选中Selector,【右键->添加装饰器->ExitPlayer_BTD】。
UE4学习笔记(二)制作简单的AI
然后再新建一个【Sequence】,【右键->添加装饰器->Blackboard】,这是和黑板数值创立联系。
UE4学习笔记(二)制作简单的AI

然后在右边,继续新建一个【Sequence】,【右键->添加装饰器->Blackboard】,选中上面的蓝框,在右边的细节中,键查询中,将已设置改为【未设置】。
UE4学习笔记(二)制作简单的AI

再在左边的序列部分,新建一个【MoveTo】,目标是PlayerObjectLocation,再新建一个【Wait】,等待时间为1S。
UE4学习笔记(二)制作简单的AI
如果,我们现在拖拽enemy到场景中,enemy并不会运动。我们可以先将【对象的多球体检测】中的Draw Debug Type选择为针对时长,绘制检测球体范围。
UE4学习笔记(二)制作简单的AI
进入Enemy_BP资产界面,选择【Enemy_BP(自身)】,再选择【类默认值】,然后在Pawn下方的AI控制器类中选中,我们选择的Enemy_Controller.
UE4学习笔记(二)制作简单的AI
然后进入Enemy_Controller资产面板中,将【运行行为树】中的BTAsset,选择Enemy_BT。
UE4学习笔记(二)制作简单的AI
再然后需要在放置actor界面中选中【体积】,选择【导航网格体边界】,拖拽至场景中,按R快捷键调整大小,调整到合适的大小。这个区域就是Enemy的行动范围。
UE4学习笔记(二)制作简单的AI

然后把Enemy_BP拖拽到场景中,生成一个实例对象。然后点击运行,这个身体绿色,长得挺别致的小家伙就是我们的玩家,后面那个白色的圆柱体就是enemy。那些绿色红色的线条就是enemy的检测范围。
UE4学习笔记(二)制作简单的AI
只是这样的怪物,一直呆在原地,有点傻,所以我们得为他做一个随机移动的服务。
进入Enemy_BT,新建一个服务,选择基类BTService_BlueprintBase,在内容浏览器命名为【RandomLocation_BTS】
UE4学习笔记(二)制作简单的AI
然后进入这个RandomLocation_BTS资产面板,然后先在函数重载中添加一个【事件接受Tick AI】,然后【获取Actor位置】,再根据这个actor的位置,在600半径的园内生成随机点,然后把值赋给【将黑板值设为向量】,将key提升为变量,修改名称为TargetLoaction,设置为公开的。

UE4学习笔记(二)制作简单的AI
然后进入Enemy_BT资产面板,在选择器的右边【右键->添加服务->RandomLoaction_BTS】。

UE4学习笔记(二)制作简单的AI
选中该服务,在细节面板,更改TargetLocation的值为【RandomLocation】。
UE4学习笔记(二)制作简单的AI
再新建一个【Move To】,将背景中的黑板键改为RandomLocation。再加上一个【Wait】,等待时间为1s,防止AI无能鬼畜。现在就大功告成了。
UE4学习笔记(二)制作简单的AI
UE4学习笔记(二)制作简单的AI

这个红点就是程序生成的随机点。