当前位置: 首页 > article >正文

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


http://www.kler.cn/a/389017.html

相关文章:

  • 大数据面试题--kafka夺命连环问(后10问)
  • C 语言标准库 - <errno.h>
  • Kubernetes的基本构建块和最小可调度单元pod-0
  • 绘制3D图
  • 2024HNCPC G - Utakotoba
  • MFC中Excel的导入以及使用步骤
  • VAE的原理及MNIST数据生成
  • 【计算机网络】基础知识,常识应用知识
  • Webpack知识点—publicPath
  • JVM 进阶:深入理解与高级调优
  • YOLOv6-4.0部分代码阅读笔记-engine.py
  • Skyeye 云智能制造 v3.14.12 发布,ERP + 商城
  • 【AI技术】PaddleSpeech部署方案
  • Python实现SSA智能麻雀搜索算法优化BP神经网络分类模型(优化权重和阈值)项目实战
  • 数据结构之排序补充
  • 12.UE5朝向鼠标攻击,状态机入门
  • fabric操作canvas绘图(1)共32节
  • 计算机毕业设计Python流量检测可视化 DDos攻击流量检测与可视化分析 SDN web渗透测试系统 网络安全 信息安全 大数据毕业设计
  • Mysql COUNT() 函数详解
  • 手动实现promise的all,race,finally方法
  • 深入理解Linux内核中的虚拟文件系统(VFS)
  • Mac中禁用系统更新
  • g++/gcc版本切换
  • 传输协议设计与牧村摆动(Makimoto‘s Wave)
  • 18、论文阅读:AOD-Net:一体化除雾网络
  • 【系统架构设计师】高分论文:论企业集成平合的技术与应用