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,一经查实,立即删除!

相关文章

新手指南:如何解决JavaScript导出CSV文件不完整的问题

在JavaScript中处理CSV文件时,需要特别注意一些特殊字符,例如逗号、双引号、换行符等。这些字符可能会影响CSV文件的解析,导致数据错乱。 1. 逗号 (,) 逗号是CSV文件默认的列分隔符。如果数据字段中包含逗号,需要将该字段用双引号…

使用ffmpeg进行音频处理

音频处理是数字媒体制作中不可或缺的一部分,而ffmpeg作为一款强大的多媒体处理工具,为我们提供了丰富的音频处理功能。 一、查看音频信息 在处理音频之前,了解音频的基本信息是非常重要的。FFmpeg的ffprobe工具可以帮助我们查看音频的详细信息,如采样率、位深等。 示例命…

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

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

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

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

十进制转二进制的计算法则

1、手动计算 计算规则:十进制整数转换为二进制整数采用"除2取余,逆序排列"法。 具体做法:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行&…

Docker从容器打包镜像到本地保存与加载

1、Docker 从容器打包成镜像 $ docker commit <container_id_or_name> <repository_name>:<tag>其中&#xff1a; <container_id_or_name> 是你要打包的容器的 ID 或名称。<repository_name> 是你希望给新镜像起的名称。<tag> 是你希望给…

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

接上面 JAVA动态表达式&#xff1a;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 *&---------------------------------------------------------------------* *&角色授权去重 *&--------…

2025长沙眼博会,2025湖南眼睛健康与眼科医疗展览会

长沙2025全国眼睛健康产业博览会暨眼科医学大会&#xff1a;专注眼康产业&#xff0c;推动区域眼康发展 长沙2025全国眼睛健康产业博览会暨眼科医学大会&#xff0c;将于8月29-31日&#xff0c;在长沙红星国际会展中心举办&#xff1b; ——随着科技的飞速发展和社会进步&…

植物大战僵尸杂交版 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 ) 将上述…

【Mysql】 MySQL索引的使用

文章目录 前言一、索引解释二、代码实现三、总结 前言 在处理大量数据的系统中&#xff0c;如何快速准确的获取所需的信息是一个重要的问题。这就像在一个巨大的图书馆中寻找一本书&#xff0c;如果没有目录或指南&#xff0c;这将是一项艰巨的任务。在数据库中&#xff0c;我…

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

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

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

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

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

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

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

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

mmap引起的内存泄漏分析

最近遇到一个内存泄漏问题&#xff0c;由于问题出现在客户端&#xff0c;只能通过客户提供的Log来分析。 根据客户提供的/proc/meminfo数据发现&#xff0c;MemAvailable 由294072kB减小至18128kB&#xff0c;减小约269MB&#xff0c;引起该变化的最直接原因是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.如何理解文件操作的本质&#xff1f; 4.输入重定向和输出重定向 1.原理 2.代码实现重定向 3.dup函数 ​编辑 4.命令行中实现重定向 二.关于缓冲区 1.现象 …

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

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

echarts学习:使用dataset管理数据

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