68. UE5 RPG 优化敌人角色的表现效果

我们现在已经有了四个敌人角色,接下来,处理一下在战斗中遇到的问题。

处理角色死亡后还会攻击的问题

因为我们有角色溶解的效果,角色在死亡以后的5秒钟才会被销毁掉。所以在这五秒钟之内,角色其实还是会攻击。主要时因为AI行为树不知道角色已经死亡,所以,我们需要在行为树里增加对角色死亡的判断。
我们在黑板增加一个黑板键,命名为Dead
在这里插入图片描述
接下来,我们打开代码编辑器,在角色死亡时,将黑板键设置为true

void ARPGEnemy::Die()
{SetLifeSpan(LifeSpan);if(RPGAIController) RPGAIController->GetBlackboardComponent()->SetValueAsBool(FName("Dead"), true); //设置死亡,停止AI行为树Super::Die();
}

有了黑板键,我们在AI行为树中增加一个装饰器,用于判断后续逻辑是否需要执行
在这里插入图片描述

在设置这里,判断Dead黑板键,如果已被设置,将终止后续的所有逻辑操作
在这里插入图片描述

碰撞问题

关于碰撞,这里在设置一下,因为移动碰撞我们使用的角色基类内置的胶囊体组件。鼠标选中需要使用角色身上的碰撞进行查询,所以,我们将其设置了开,但是,因为身体时包裹在胶囊体组件里面,所以,我们不需要它触发和技能的检测,这个交给胶囊体组件即可。
所以,我们最终的设置为
胶囊体组件:需要开启重叠事件,用于接受投掷物的碰撞检测,检测响应关闭,用于防止被鼠标拾取到和阻挡相机将相机拉进,还有和火球的重叠需要设置为重叠
在这里插入图片描述
网格体碰撞:主要是为了能够被鼠标选中,让玩家攻击,所以,我们需要将碰撞设置为可以查询,并且将通道Visibility设置为阻挡
在这里插入图片描述
武器不需要碰撞,只用作展示,所以我们将其设置了没有碰撞
在这里插入图片描述

优化敌人的音效

现在我们敌人还没有移动声效,我们接下来增加敌人的脚步声,这个脚步声,我们直接在动画里面添加,这样混合空间进行混合移动时,就能够触发对应的音效。
我们打开移动文件,在动画脚落地的帧增加一个播放音效的通知
在这里插入图片描述
然后设置音效即可
在这里插入图片描述
接下来,我们设置一下战士攻击时的音效,由于攻击通常会从多个攻击音效中随机一个使用,这里设置里通用模版,从设置的数组中随机一个音频播放,并随机音高,输出的还是立体声。
在这里插入图片描述
设置立体声这里需要选择MetaSound设置
在这里插入图片描述
在细节这里设置输出格式
在这里插入图片描述
我们选择输入的变量
在这里插入图片描述
在细节这里添加音频
在这里插入图片描述
选择内容浏览器,打开一个新的资源管理器
在这里插入图片描述
打开目录
在这里插入图片描述
选中拖拽到数组中
在这里插入图片描述
打开攻击的蒙太奇,将音效添加进去
在这里插入图片描述

添加粒子特效

我们将实现角色冒血的特效,需要在每个角色身上设置,那么在角色基类上增加一个设置Niargra粒子特效的配置项。

	UPROPERTY(EditAnywhere, BlueprintReadOnly)UNiagaraSystem* BloodEffect; //受伤特效

然后我们在战斗接口增加一个获取受伤特效的函数,用于技能攻击时,集中目标角色后,可以通过目标角色的受伤特效显示。

	UFUNCTION(BlueprintNativeEvent, BlueprintCallable)UNiagaraSystem* GetBloodEffect(); //获取角色的受伤特效

然后,我们在角色基础类里面覆写它

virtual UNiagaraSystem* GetBloodEffect_Implementation() override;

并在实现里返回配置项

UNiagaraSystem* ARPGCharacter::GetBloodEffect_Implementation()
{return BloodEffect;
}

设置和获取受伤特效的代码就完成了。后续我们可以在技能蓝图里面获取和设置。

然后,我们想给敌人技能增加集中声效,在技能设置的结构体里面增加一个音效设置

//蒙太奇动画和标签以及骨骼位置的映射,用于攻击技能获取和设置攻击范围
USTRUCT(BlueprintType)
struct FTaggedMontage
{GENERATED_BODY()//使用的蒙太奇UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)UAnimMontage* Montage = nullptr;//对应的标签UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)FGameplayTag MontageTag;//攻击时的触发伤害的骨骼插槽UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)FName CombatTipSocketName; //设置技能释放的位置//攻击时的触发音效UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)USoundBase* ImpactSound = nullptr;
};

编辑代码,打开UE,在敌人蓝图基类里面设置通用的受伤特效
在这里插入图片描述
接下来设置技能击中的音效,我们先创建一个混合音效
在这里插入图片描述
然后设置给技能
在这里插入图片描述
接下来在敌人的近战攻击中实现逻辑,我们首先增加一个局部变量,用于获取释放击中了敌人。
在这里插入图片描述
在触发技能时,设置为false,因为它对一个角色只存在一个,并且不会销毁,所以,我们要保证没有击中敌人时,这个值为false
在这里插入图片描述
然后在最后,应用伤害后面设置为true,代表已经击中了敌人
在这里插入图片描述
接下来,就是在角色身上播放一个击中特效
在这里插入图片描述
在数组角色循环完成后,如果布尔值变为了true,代表击中了敌人,那么,我们将播放一个音效,也就是技能击中的音效
在这里插入图片描述
然后运行查看是否实现了对应的效果
在这里插入图片描述

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

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

相关文章

【踩坑】修复Ubuntu远程桌面忽然无法Ctrl C/V复制粘贴及黑屏

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 说在前面: 需要注意的是,我发现他应该是新开了一个窗口给我。我之前打开的东西,在这个新窗口里都没有了&#xff0c…

区间预测 | Matlab实现GRU-ABKDE门控循环单元自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现GRU-ABKDE门控循环单元自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现GRU-ABKDE门控循环单元自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现GRU-ABKDE门控循环单元自适应…

JAVA动态表达式:Antlr4 表达式树解析

接上面 JAVA动态表达式:Antlr4 G4 模板 读取字符串表达式结构树-CSDN博客 目前已经实现了常量及分组常规表达式的解析。 String formula "啦啦啦1 and 11 and 23 and 1123 contains 1 and 23455 notcontains 5"; String formula "啦啦啦1 and (…

SAP 角色授权账户 重复的问题 解决方案

直接从agr_usrs 里面删除新的 *&---------------------------------------------------------------------* *& Report ZRPT_BC_ROLEASSIGN_RM_DUP *&---------------------------------------------------------------------* *&角色授权去重 *&--------…

植物大战僵尸杂交版 fatal error及问题解决闪退

echo off set KEY_NAMESoftware\PopCap\PlantsVsZombies set VALUE_NAMEScreenmode set DATA0 reg add HKCU%KEY_NAME% /v %VALUE_NAME% /t REG_DWORD /d %DATA% /f if %errorlevel% neq 0 ( echo 注册表数值数据修改失败 ) else ( echo 注册表数值数据已成功修改为0 ) 将上述…

requests post json/data;requests response 接收不同数据

1、requests post json/data 在Python的requests库中,当你发送POST请求时,可以选择使用json参数或data参数来传递数据。这两者之间的主要区别在于它们如何被序列化和发送到服务器。 json参数: 当你使用json参数时,requests库会自…

【CTF Web】CTFShow 数据库恶意下载 Writeup(目录扫描+mdb文件泄露+Access脱库)

数据库恶意下载 10 mdb文件是早期aspaccess构架的数据库文件,文件泄露相当于数据库被脱裤了。 解法 用 dirsearch 扫描。 dirsearch -u 4b9b415f-4062-4bba-a6f5-3b107804043f.challenge.ctf.show找到一个 db 目录。 扫描 db 目录。 dirsearch -u 4b9b415f-4062-…

湖仓一体全面开启实时化时代

摘要:本文整理自阿里云开源大数据平台负责人王峰(莫问)老师在5月16日 Streaming Lakehouse Meetup Online 上的分享,主要介绍在新一代湖仓架构上如何进行实时化大数据分析。内容主要分为以下五个部分: Data Lake Dat…

Spring Boot 项目启动时在 prepareContext 阶段做了哪些事?

概览 如果你对Spring Boot 启动流程还不甚了解,可阅读《Spring Boot 启动流程详解》这篇文章。如果你已了解,那就让我们直接看看prepareContext() 源码。 private void prepareContext(ConfigurableApplicationContext context, ConfigurableEnvironme…

mmap引起的内存泄漏分析

最近遇到一个内存泄漏问题,由于问题出现在客户端,只能通过客户提供的Log来分析。 根据客户提供的/proc/meminfo数据发现,MemAvailable 由294072kB减小至18128kB,减小约269MB,引起该变化的最直接原因是PageTables由614…

CTFshow-web sql注入

Web171 1 在题目中可以看到查询语句为 "select username,password from user where username !flag and id ".$_GET[id]." limit 1;"; 直接使用万能密码 查到了所有用户 获得flag Web172 0 可以看到返回逻辑显示 如果返回的查询数据中username不等于fl…

Linux基础IO【II】真的很详细

目录 一.文件描述符 1.重新理解文件 1.推论 2.证明 2.理解文件描述符 1.文件描述符的分配规则 3.如何理解文件操作的本质? 4.输入重定向和输出重定向 1.原理 2.代码实现重定向 3.dup函数 ​编辑 4.命令行中实现重定向 二.关于缓冲区 1.现象 …

Web应用安全测试-业务功能滥用(一)

Web应用安全测试-业务功能滥用(一) 1、短信定向转发 漏洞描述:短信接收人可任意指定 测试方法:拦截发送短信的请求,将手机号改为测试人员的手机号,测试是否可接收短信验证码。 风险分析:攻击…

echarts学习:使用dataset管理数据

前言 在我们公司的组件库中有许多echarts图表相关的组件,这些组件在使用时,只需将图表数据以特定的格式传入组件中,十分方便。因此当我得知echarts 可以使用dataset集中管理数据时,我就决定自己一定要搞懂它,于是在最…

oracle 删除当前用户下所有表

荆轲刺秦王 通常呢 我们将正式环境的 oracle 数据库 导出成 dmp 文件,然后导入到测试环境或者本地环境,期间可能会出现各种问题。那么如何使错误的导入数据全部删除呢。可以这样做: 1. 本地虚拟机启动 oracle 服务 2. sqldeveloper 连接 o…

vue 安装依赖报错

解决方法: npm install --legacy-peer-deps 然后再运行项目即可。

LabVIEW利用旋转编码器脉冲触发数据采集

利用旋转编码器发出的脉冲控制数据采集,可以采用硬件触发方式,以确保每个脉冲都能触发一次数据采集。本文提供了详细的解决方案,包括硬件连接、LabVIEW编程和触发设置,确保数据采集的准确性和实时性。 一、硬件连接 1. 旋转编码…

北斗应急通信手持终端如何在户外使用

北斗应急通信手持终端在户外的使用,需要遵循一定的步骤和注意事项以确保其高效、安全地运作。以下是一个清晰的使用指南: 一、准备阶段 检查电量:确保北斗应急通信手持终端的电量充足,并携带备用电源以应对长时间使用的情况。 熟…

Ubuntu系统设置中文输入法

重新设置超级用户权限(root)密码(非必要) sudo passwd root 需要注意的是Ubuntu的root密码不能少于8个字符 设置成功后输入命令和新的密码即可无需输入sudo启用root命令 su - 更新软件包列表 sudo apt update sudo apt upgrade 安装fcitx5输入法框架 个别情况需要卸载旧的…

红黑树【C++实现】

文章目录 红黑树的概念红黑树的性质红黑树的操作红黑树结点的定义红黑树的插入情况一:插入结点的叔叔存在,且叔叔的颜色是红色情况二: 插入结点的叔叔存在,且叔叔的颜色是黑色情况三: 插入结点的叔叔不存在 红黑树的验证红黑树的查找 红黑树的…