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.rhkb.cn/news/350947.html

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

相关文章

LeetCode 算法:回文链表 c++

原题链接🔗:回文链表 难度:简单⭐️ 题目 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head…

C++11移动语义

前言 之前我们已经知道了在类里开辟数组后,每一次传值返回和拷贝是,都会生成一个临时变量 class Arr { public://构造Arr() {/*具体实现*/ };//拷贝Arr(const Arr& ar) {/*具体实现*/ };//重载Arr operator(const Arr& ar) { /*具体实现*/Arr …

Python高级编程:Functools模块的8个高级用法,强烈建议添加到你的开发工具箱中!

目录 1. functools.partial 2. functools.lru_cache lru_cache的特点 cache的特点 性能比较与选择 3. functools.reduce functools.reduce的作用 工作原理 示例 累加序列中的所有元素 计算阶乘 initializer的使用 应用场景 示例:计算平均销售额 小结 4. funct…

微前端乾坤方案

微前端乾坤方案 了解乾坤 官方文档 介绍 qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。 qiankun 的核心设计理念 🥄 简单 由于主应用微应用都能做到技术栈无关,qiankun 对…

Java 桥接模式(Bridge Pattern)是设计模式中的一种结构型设计模式,桥接模式的核心思想是将抽象与实现解耦

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与它的实现部分分离,使它们都可以独立地变化。桥接模式的核心思想是将抽象与实现解耦,使得它们可以独立扩展。 在桥接模式中,通常包含以下四个…

DAY3-力扣刷题

1.罗马数字转整数 13. 罗马数字转整数 - 力扣(LeetCode) 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L …

最长不下降子序列LIS详解

最长不下降子序列指的是在一个数字序列中,找到一个最长的子序列(可以不连续),使得这个子序列是不下降(非递减)的。 假如,现有序列A[1,2,3,-1,-2&…

16.大模型分布式训练框架 Microsoft DeepSpeed

微调、预训练显存对比占用 预训练LLaMA2-7B模型需要多少显存? 假设以bf16混合精度预训练 LLaMA2-7B模型,需要近120GB显存。即使A100/H100(80GB)单卡也无法支持。 为何比 QLoRA多了100GB?不妨展开计算下显存占用&…

誉天教育近期开班计划(6月15日更新)

云计算HCIP 周末班 2024/6/15 田老师 售前IP-L3 周末班 2024/6/15 陈老师 RHCA442 晚班 2024/6/17邹老师 数通HCIE 晚班 2024/6/24阮老师 云计算HCIE直通车晚班 2024/6/25 曾老师 售前IT-L3 周末班 2024/6/29 伍老师 数通HCIP 晚班 2024/7/1杨老师 存储直通车 晚班 2024/7/1 高…

从ES的JVM配置起步思考JVM常见参数优化

目录 一、真实查看参数 (一)-XX:PrintCommandLineFlags (二)-XX:PrintFlagsFinal 二、堆空间的配置 (一)默认配置 (二)配置Elasticsearch堆内存时,将初始大小设置为…

Windows Server 2008 r2 IIS .NET

Windows Server 2008 r2 IIS .NET

CleanMyMacX4.15.4如何优化苹果电脑系统缓存,告别MacBook卡顿,提升mac电脑性能

你是否曾为苹果电脑存储空间不够而烦恼?是否曾因系统运行缓慢而苦恼?别担心,今天我要给大家种草一个神器——CleanMyMac!这款软件可以帮助你轻松解决苹果电脑的种种问题,让你的电脑焕然一新! 让我来给大家介…

springboot原理篇-配置优先级

springboot原理篇-配置优先级(一) springboot项目一个支持三种配置文件 application.propertiesapplication.ymlapplication.yaml 其中,优先级的顺序是: application.properties > application.yml > application.yaml 也…

基于Nios-II实现流水灯

基于Nios-II实现流水灯的主要原理 涉及到FPGA(现场可编程门阵列)上的嵌入式软核处理器Nios II与LED控制逻辑的结合。以下是详细的实现原理,分点表示并归纳: Nios II软核处理器介绍: Nios II是Altera公司推出的一种应用…

Vue笔记(二)

Vue(一):Vue笔记(一)-CSDN博客 目录 综合案例:水果购物车 生命周期 1.生命周期&生命周期四个阶段 2.生命周期函数(钩子函数【8个】) 3.生命周期两个案例 初始化渲染 自动获…

Node.js和npm的安装及配置

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞 I/O 的模型。 npm(node package manager)是一个 Node.js 包管理和分发工具,也是整个 Node.js 社区最流行、支持第三方模块最多的包管理器。使…

2024.6.14 作业 xyt

使用手动连接,将登录框中的取消按钮使用第二中连接方式,右击转到槽,在该槽函数中,调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c…

Unity2D计算两个物体的距离

1.首先新建一个场景并添加2个物体 2.创建一个脚本并编写代码 using UnityEngine;public class text2: MonoBehaviour {public GameObject gameObject1; // 第一个物体public GameObject gameObject2; // 第二个物体void Update(){// 计算两个物体之间的距离float distance Vec…

学习笔记——网络管理与运维——SNMP(SNMP架构)

三、SNMP架构 1、SNMP结构概述 SNMP被设计为工作在TCP/IP协议族上,基于TCP/IP协议工作,对网络中支持SNMP协议的设备进行管理。所有支持SNMP协议的设备都提供SNMP这个统一界面,使得管理员可以使用统一的操作进行管理,而不必理会设…

课设--学生成绩管理系统(一)

欢迎来到 Papicatch的博客 文章目录 🍉技术核心 🍉引言 🍈标识 🍈背景 🍈项目概述 🍈 文档概述 🍉可行性分析的前提 🍈项目的要求 🍈项目的目标 🍈…