自学内容网 自学内容网

16.UE5拉怪机制,怪物攻击玩家,伤害源,修复原视频中的BUG

2-18 拉怪机制,怪物攻击玩家、伤害源、黑板_哔哩哔哩_bilibili

目录

1.实行行为树实现拉怪机制

1.1行为树黑板

 1.2获取施加伤害对象(伤害源)

2.修复原视频中,第二次攻击怪物后,怪物卡在原地不动的BUG

3.怪物攻击玩家


1.实行行为树实现拉怪机制

1.1行为树黑板

在AI行为树的蓝图中创建黑板,并命名为怪物黑板。

我理解的黑板是:为行为树绑定黑板,当黑板中出现指定的目标时,选择行为树的特定分支,执行特定的事件。

相当于AI的猎杀清单,当遇到清单上的目标时,会执行相应的动作。这个猎杀清单刚开始是空的,当玩家触发某些条件(攻击怪物,走到怪物领域内)在黑板中添加该玩家,实现相应动作。

黑板中存储的内容是以键值对存储的,在黑板定义时为key命名,在触发某些条件时(攻击怪物,走到怪物领域内)为对应的key赋值相应的value。

 打开黑板

 在黑板中新建一个object对象,并命名为目标玩家。

 添加分支和装饰器,当装饰器上的目标玩家出现时,执行该分支。

 创建新的AI任务蓝图:怪物走向玩家

 怪物不死亡时,使用AI MOVE TO从黑板中获取到目标对象,让怪物移动到目标对象处

因为在上述任务的变量中公开了黑板属性,所以在行为树中可以编辑该属性,当该属性为目标玩家时开始执行节点。

 1.2获取施加伤害对象(伤害源)

 现在我们需要在游戏运行时,为我们怪物的黑板添加对象,当怪物收到玩家伤害时,给怪物的目标对象赋值为施加伤害的玩家。

主要分三步走:

        1.告诉火球,谁生成了它,让他记住自己的主人是谁。

        2.火球打到人后,火球传话给被打者,自己的主人是谁,你找他去算账去。

        3.被打者拿到火球的主人(对象),进行仇恨的设定(反伤)等等。

1.打开角色蓝图,在发射火球的方法中,做出如下修改,告诉生成的火球,是self生成了它。

同理,流星火雨也一样。

 2.打开火球蓝图(流星火雨同理),编辑重叠事件方法,火球作为话事人,告诉被打者,谁是火球的顶头上司,在火球施加应用伤害是,把instigator传递到参数damage causer上

 3.被打者获取到火球的发射者,并将其添加到怪物黑板。

在怪物蓝图中变价事件任意伤害方法。

这里的Damage Causer就是火球的发射者。

前面我们说了黑板的存储是以键值对的形式存在的,我们的key=="目标玩家"上要赋值value=="火球的发射者",利用将值设为对象,self获取AI的黑板,并将黑板中key=="目标玩家"的赋值为value ==Damage Causer。

这里会有人好奇,怪物蓝图是怎么得到黑板对象,并对其赋值的。

怪物蓝图绑定了AI控制器,AI控制器运行了AI行为树,所以怪物蓝图运行了行为树,且行为树对应唯一的黑板对象,所以怪物蓝图拿到了唯一的黑板对象。

 这就实现了AI自动跟踪的效果。

2.修复原视频中,第二次攻击怪物后,怪物卡在原地不动的BUG

 哇,测试了很久才测出来的,视频中,为了实现让受击怪物僵直在原地的效果,有一个立即停止移动的逻辑,导致怪物在ai move to时永远也不可能成功,行为树卡在了ai move to上,

 既然卡在了AI MOVE TO上,当AI MOVE TO失败后,我们继续让怪物跳回方法最初的地方继续判断和执行即可。

3.怪物攻击玩家

主要流程为下

1.行为树调用怪物普通攻击。

2.怪物普通攻击只播放蒙太奇,蒙太奇创建动画通知调用施加伤害方法。

3.施加伤害方法把伤害打到主角上。

打开怪物总类蓝图,创建怪物攻击玩家的自定义事件

1.创建怪物的普通攻击的自定义事件,就只是播放一个动画蒙太奇,随后通过在蒙太奇中添加通知的方式,调用施加伤害的方法,实现动作游戏中,特定帧造成伤害的效果。

 2.施加伤害的自定义事件的实现

通过针对Object进行多球体追踪,在怪物身前70像素,100半径内获取到pawn对象

  获取到pawn对象转换为玩家对象,后进行应用伤害,随后会通过动画通知调用这个方法实现。

 3.创建攻击蒙太奇并添加通知

 在动画蓝图中,通过通知调用001怪物的施加伤害事件

 4.AI行为树调用最初的普通攻击方法

新建任务怪物攻击,怪物攻击后逗留1秒,比较自然。

 逻辑很简单,怪物不死亡,直接调用怪物的普通攻击方法,即可。

总体思路:因为前面的行为树:“怪物走向玩家”成功后,才会执行这个“怪物攻击”节点,所以这个怪物的普通攻击肯定是面向主角,且距离较近,在播放普通攻击蒙太奇后,动画通知会自动调用施加伤害的方法,施加伤害通过多球体对object进行检测,获取球体内的所有pawn,如果这个pawn能转换为主角,则对主角调用应用伤害方法,最后再实现一下主角蓝图中的任意伤害事件即可,实现方法如下:


原文地址:https://blog.csdn.net/fadedisme/article/details/143656705

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!