65. UE5 RPG 实现远程攻击

news2024/11/29 2:46:36

前面,我们实现了敌人的近战普通攻击,还兼容了对于没有武器的敌人的攻击。有近战就要有远程,这一篇,我们实现一下敌人的远程攻击。
首先,由于创建的资源增多,我们将GA和GE按敌人和英雄的类别分开,分别在目录下面创建存放GA和GE的文件夹
在这里插入图片描述
这样条例会更加的清晰,方便我们后续的资源维护。

创建远程敌人技能

接下来,我们创建一个敌人的技能蓝图,继承我们之前实现的投掷技能的类ProjectileSpell类
在这里插入图片描述
命名为GA_RangedAttack,专门用于敌人的技能投掷
在这里插入图片描述
有了这个技能蓝图后,我们需要在蓝图中连节点实现播放蒙太奇,并生成发射的实例
在这里插入图片描述
还需要在右侧设置,Projectile Class用来设置技能生成的发射物的实例,Damage Effect Class用来设置发射物使用的GE,Damage Types用来设置技能造成的伤害的曲线,最后的标签用来设置应用以后,可以使用此标签激活技能。
在这里插入图片描述
伤害的计算这个我们之前写的那个比较通用,所以直接设置即可
在这里插入图片描述
在高级设置这里,我推荐设置每个Actor只创建一个对应的实例,如果重复激活时,结束之前的即可
在这里插入图片描述

创建发射物

参照之前我们实现的火球术,在技能释放后,会生成一个发射物体,也就是火球。
敌人发射的是石头,我们仿照火球,创建一个对应的类,基于Projectile
在这里插入图片描述
命名为BP_SlingshotRock,意为发射出去的石头
在这里插入图片描述
打开蓝图,添加一个静态网格体
在这里插入图片描述
设置模型
在这里插入图片描述
这里讲一个小技巧,如果你先选中模型
在这里插入图片描述
然后回到蓝图中,选择添加,编辑器会智能的推荐你创建对应的组件,并且还会自动给你应用上你选择的模型
在这里插入图片描述
我们选择发射组件,可以修改发射物的发射出去的速度,以及是否受重力影响
在这里插入图片描述
技能将静态网格体组件的碰撞关闭,我们不需要它的碰撞事件
在这里插入图片描述

由于我们在c++里面封装了对应的实现,只需要将GE的实例设置给它即可。最后,我们将创建的此蓝图设置给技能
在这里插入图片描述

创建伤害曲线

接下来,就是设置当前技能的伤害,我们需要一条伤害曲线,能够随着敌人的等级提升,提升技能的伤害。所以我们在之前的CT_Damge曲线表格中,增加新的一行,定义远程伤害的曲线。
在这里插入图片描述
右键重命名
在这里插入图片描述
重命名为Abilities.Ranged
在这里插入图片描述
在线上面右键,添加关键帧,用来设置1-40级的技能伤害
在这里插入图片描述
我们设置1级伤害7.5,40级伤害35,相对于近战伤害要低,这是正常的,毕竟近战敌人需要靠近玩家才可以攻击
在这里插入图片描述
然后我们选中所有关键帧,设置自动,它会自动给我们圆滑曲线
在这里插入图片描述
最终效果如下
在这里插入图片描述
保存资源,设置到技能,这个技能伤害类型也是物理伤害
在这里插入图片描述

应用技能并实现激活技能

技能相关数值我们已经设置完成了,接下来,我们要实现技能应用,并在AI行为树中激活
我们要将技能添加数据资产中,初始化角色时,可以将技能应用到角色ASC身上
打开DA_CharacterClassInfo,将创建的技能设置给远程职业
在这里插入图片描述
我们给技能设置技能标签,这个可以用于激活技能
在这里插入图片描述
在AI行为树这里,设置对应的标签
在这里插入图片描述
攻击目标的黑板键也要设置正确
在这里插入图片描述

我们在任务触发执行时,会调用通过标签激活技能
在这里插入图片描述
然后测试技能是否能够成功被触发,我们在技能里面连一下测试节点,在技能激活时,绘制一个debg球
在这里插入图片描述
接着运行测试效果
在这里插入图片描述

创建蒙太奇

接下来,我要实现对蒙太奇的制作,技能激活以后,我们需要敌人去播放一个蒙太奇,来实现攻击动画,然后在攻击中触发发射石头的事件。
首先查看动画是否已经开启了根运动
在这里插入图片描述
创建蒙太奇,命名为AM_Attack_Goblin_Slingshot
在这里插入图片描述
添加两个事件轨道
在这里插入图片描述
在第一个添加MotionWarping旋转事件
在这里插入图片描述
配置还是和以前一样
在这里插入图片描述
接着在释放攻击的动画位置增加一个通知
在这里插入图片描述
标签设置为武器标签,我们想使用武器的节点位置
在这里插入图片描述
蒙太奇就制作完成了,我们需要将其数据添加到角色蓝图身上,我们还缺少一项数据,就是使用的武器上的插槽,打开武器骨骼,添加一个插槽,用来设置技能创建的位置
在这里插入图片描述
设置完成,我们将动画设置到角色身上
在这里插入图片描述

实现技能蓝图逻辑

在技能激活后,我们首先获取到攻击目标,这个是在AI行为树的任务中设置的
在这里插入图片描述

在随机获取这一块的节点我们准备整理成c++代码,然后在蓝图中直接调用节点即可
在这里插入图片描述
我们在伤害技能基类里面增加一个函数,用于获取一个随机蒙太奇

	//从角色设置的蒙太奇数组总,随机一个蒙太奇使用
	UFUNCTION(BlueprintPure)
	static FTaggedMontage GetRandomTaggedMontageFromArray(const TArray<FTaggedMontage>& TaggedMontages);

使用代码实现就显得结构很整洁

FTaggedMontage URPGDamageGameplayAbility::GetRandomTaggedMontageFromArray(const TArray<FTaggedMontage>& TaggedMontages)
{
	if(TaggedMontages.Num() > 0)
	{
		const int32 RandomNum = FMath::RandRange(0, TaggedMontages.Num() - 1);
		return TaggedMontages[RandomNum];
	}
	return FTaggedMontage();
}

实现完成,编辑代码,我们修改成使用此函数获取随机蒙太奇
在这里插入图片描述
然后再添加监听事件节点,监听对应的蒙太奇事件,并从骨骼获取到技能生成的位置
在这里插入图片描述
接着,我们测试一下,位置获取的是否正确,方便下一步
在这里插入图片描述
运行测试是否能够正常触发
在这里插入图片描述
接着,我们修改蓝图,获取攻击目标,然后创建发射物
在这里插入图片描述
这样就实现了我们所需的效果,接下来,我们要在投掷物类里面重叠事件回调中,增加逻辑判断,如果是友军,将不会伤害它
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1802301.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MPC控制简化版

MPC控制算法简化版 模型预测控制&#xff08;Model Predictive Control&#xff0c;MPC&#xff09;是一种先进的控制策略&#xff0c;广泛应用于人形机器人的运动控制。具体实现过程中&#xff0c;还需结合机器人的实际动力学模型和更多的物理约束条件。以下是一个人形机器人…

基本 MOSFET 恒流源

恒流源在电路分析练习和网络定理中占有重要地位&#xff0c;然后它们似乎或多或少消失了。。。除非你是IC设计师。尽管在典型 PCB 设计中很少遇到&#xff0c;但电流源在模拟 IC 领域却无处不在。这是因为它们 1) 用于偏置&#xff0c;2) 作为有源负载。 偏置&#xff1a; 用作…

【SkyWalking】启用apm-trace-ignore-plugin追踪忽略插件

背景 使用Agent采集追踪数据的时候&#xff0c;想排除某些路径&#xff0c;比如健康检查等&#xff0c;这样可以减少上报的数据&#xff0c;也可以去除一些不必要的干扰数据。 加载插件 在agent/optional-plugins目录中有个apm-trace-ignore-plugin-${version}.jar插件&…

Hive on Spark版本兼容性

Hive on Spark仅在特定版本的Spark上进行测试&#xff0c;因此给定版本的Hive只能保证与特定版本的Spark一起工作。其他版本的Spark可能与给定版本的Hive一起工作&#xff0c;但不能保证。以下是Hive版本及其对应的Spark版本列表&#xff1a; 详情参考官方文档&#xff1a;http…

C# 异步方法async / await 任务超时处理

一、需求 如果调用一个异步方法后&#xff0c;一直不给返回值结果怎么办呢&#xff1f;这就涉及到怎么取消任务了。 二、Task取消任务 static CancellationTokenSource source new CancellationTokenSource();static void Main(string[] args){Task.Run(() >{for (int i …

C# WPF入门学习主线篇(十)—— DataGrid常见属性和事件

C# WPF入门学习主线篇&#xff08;十&#xff09;—— DataGrid常见属性和事件 欢迎来到C# WPF入门学习系列的第十篇。在前面的文章中&#xff0c;我们已经学习了 Button、TextBox、Label、ListBox 和 ComboBox 控件。今天&#xff0c;我们将探讨 WPF 中的另一个重要控件——D…

CHATGPT升级plus(已有账号前提下)

注册wildcard(虚拟卡) 注册号账号后先进行充值&#xff0c;充值后选择CHATGPT一键升级按照他的流程来即可 Wildcard网址&#xff1a;Wildcard跳转注册 填写邀请码充值时少两美金合计14&#xffe5; 邀请码&#xff1a;OL3QXTRH

Adobe Illustrator 矢量图设计软件下载安装,Illustrator 轻松创建各种矢量图形

Adobe Illustrator&#xff0c;它不仅仅是一个简单的图形编辑工具&#xff0c;更是一个拥有丰富功能和强大性能的设计利器。 在这款软件中&#xff0c;用户可以通过各种精心设计的工具&#xff0c;轻松创建和编辑基于矢量路径的图形文件。这些矢量图形不仅具有高度的可编辑性&a…

Codeforces Round 951 (Div. 2)

A - Guess the Maximum 直接暴力枚举 a i , a i 1 a_i,a_{i1} ai​,ai1​找最小的最大值 答案即为最小的最大值-1 code: #include<bits/stdc.h> #define endl \n #define fast() ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr) #define F first #…

skywalking学习

文章目录 前言一、skywalking单体安装部署1. 下载skywalking2. 部署oap和oap-ui服务3. 测试skywalking监控springboot应用 二、搭建swck(skywalking集群)1.安装k8s2.下载swck3.设置pod自动注入java agent 三、skywalking监控python四、skywalking监控cpp总结参考 前言 本文主要…

RTKLIB之RTKPLOT画图工具

开源工具RTKLIB在业内如雷贯耳&#xff0c;其中的RTKPLOT最近正在学习&#xff0c;发现其功能之强大&#xff0c;前所未见&#xff0c;打开了新的思路。 使用思博伦GSS7000卫星导航模拟器,PosApp软件仿真一个载具位置 1&#xff0c;RTKPLOT支持DUT 串口直接输出的NMEA数据并…

HCL模拟器下做M-LAG测试(以及和华为配置对比)-二层架构

1.简单二层架构 1.1 拓扑图 1.2 配置 1.2.1 Leaf1配置 system-mac必须配置&#xff0c;否则会有一个node处于unknown状态&#xff0c;即使配置主节点的mac&#xff0c;主节点也需要配置system-mac为自己的mac ## M-LAG配置[Leaf1] m-lag system-mac 0001-0001-0001 # 手动设…

MFC 教程-回车时窗口退出问题

【问题描述】 MFC窗口默认时&#xff0c;按回车窗口会退出 【原因分析】 默认调用OnOK() 【解决办法】 重写虚函PreTranslateMessage BOOL CTESTMFCDlg::PreTranslateMessage(MSG* pMsg) {// TODO: 在此添加专用代码和/或调用基类// 修改回车键的操作反应 if (pMsg->…

物理安全防护如何创新强化信息安全体系?

物理安全防护是信息安全体系的重要组成部分&#xff0c;它通过保护实体设施、设备和介质等&#xff0c;防止未授权访问、破坏、盗窃等行为&#xff0c;从而为信息系统提供基础的安全保障。要创新强化信息安全体系中的物理安全防护&#xff0c;可以从以下几个方面着手&#xff1…

企业数字化转型的测度难题:基于大语言模型的新方法与新发现

《经济研究》新文章《企业数字化转型的测度难题&#xff1a;基于大语言模型的新方法与新发现》运用机器学习和大语言模型构造一套新的企业数字化转型指标。理论分析和数据交叉验证均表明&#xff0c;构建的指标相对已有方法更准确&#xff1a; 1.第一步&#xff1a;选择“管理…

Redis常用命令——List篇

提到List&#xff0c;我们第一时间想到的就是链表。但是在Redis中&#xff0c;List更像是一种双端队列&#xff0c;例如C中的deque。它可以快速高效的对头部和尾部进行插入和删除操作。本片文章主要对List列表的相关命令进行详解&#xff0c;希望本篇文章会对你有所帮助。 文章…

js--hasOwnProperty()讲解与使用

@TOC 前言 hasOwnProperty(propertyName)方法 是用来检测属性是否为对象的自有属性 object.hasOwnProperty(propertyName) // true/false 讲解 hasOwnProperty() 方法是 Object 的原型方法(也称实例方法),它定义在 Object.prototype 对象之上,所有 Object 的实例对象都会继…

高考志愿选专业,如何分析自己的兴趣爱好?

之所以在选择专业的时候比较迷茫&#xff0c;就是对自己不够了解&#xff0c;没有分析过自己的兴趣爱好&#xff0c;所以也不知道如何选择适合自己的专业&#xff0c;但是他们又不得不做出更深入的了解&#xff0c;因为专业的选择将关系到未来的职业道路和生活方向。 对于绝大…

java 大型企业MES生产管理系统源码:MES系统与柔性化产线控制系统的关系、作用

MES定义为“位于上层的计划管理系统与底层的工业控制之间的面向车间层的管理信息系统”,它为操作人员/管理人员提供计划的执行、跟踪以及所有资源(人、设备、物料、客户需求等)的当前状态。 MES系统与柔性化产线控制系统的关系 MES&#xff08;制造执行系统&#xff09;是一种…

Apifox的使用

1、了解Apifox的工具特点和使用方法 2、使用Apifox辅助生成接口文档&#xff0c;尝试使用Apifox进行其他前后端调试。 Apifox IDEA 插件快速上手 | Apifox 帮助文档 Apifox IDEA 插件来啦&#xff01;是真的超好用&#xff01;_哔哩哔哩_bilibili 21分钟学会Apifox_哔哩哔哩…