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能转换为主角,则对主角调用应用伤害方法,最后再实现一下主角蓝图中的任意伤害事件即可,实现方法如下:

相关推荐
妙为16 小时前
ue5 仿鬼泣5魂类游戏角色和敌人没有碰撞
游戏·ue5·碰撞
努力的小钟21 小时前
Unreal Engine 高效数组复制用法详解
ue5·游戏引擎·虚幻
Zhichao_971 天前
【UE5 C++课程系列笔记】32——读Json文件并解析
c++·ue5
吴梓穆2 天前
UE5学习笔记 FPS游戏制作42 按钮添加回调函数
笔记·学习·ue5
沾血滴蔷薇2 天前
虚幻5入门
数码相机·ue5
吴梓穆2 天前
UE5学习笔记 FPS游戏制作39 制作一个带有背景的预制面板 使用overlay和nameSlot
笔记·学习·ue5
AgilityBaby2 天前
UE5把动画导出为视频格式
ue5·游戏引擎·unreal engine
远离UE43 天前
UE5 Simulation Stage
ue5
吴梓穆3 天前
UE5学习笔记 FPS游戏制作38 继承标准UI
笔记·学习·ue5
蛋卷卷-3 天前
【UE5】发现意外的文件尾解决方法
ue5