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

相关推荐
笑鸿的学习笔记1 天前
虚幻引擎5-Unreal Engine笔记之SET节点的输出引脚获取设置后的最新变量值
笔记·ue5·虚幻
Zhichao_971 天前
【UE5.1 C++】VS2022下载安装
ue5
m0_552200822 天前
《UE5_C++多人TPS完整教程》学习笔记37 ——《P38 变量复制(Variable Replication)》
c++·游戏·ue5
曹勖之2 天前
在 UE5 蓝图中配置Actor类型的Asset以作为位置和旋转设置目标
ue5·机器人
曹勖之2 天前
UE 5 和simulink联合仿真,如果先在UE5这一端结束Play,过一段时间以后**Unreal Engine 5** 中会出现显存不足错误
matlab·ue5·机器人
AgilityBaby2 天前
UE5 2D角色PaperZD插件动画状态机学习笔记
笔记·学习·ue5
AgilityBaby2 天前
UE5 创建2D角色帧动画学习笔记
笔记·学习·ue5
ue星空5 天前
UE音频中间件wwise插件
学习·ue5·音视频
AgilityBaby7 天前
UE5打包项目设置Project Settings(打包widows exe安装包)
c++·3d·ue5·游戏引擎·unreal engine
AgilityBaby7 天前
UE5蓝图暴露变量,在游戏运行时修改变量实时变化、看向目标跟随目标Find Look at Rotation、修改玩家自身弹簧臂
笔记·游戏·ue5·游戏引擎·蓝图