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

UE5多人MOBA+GAS 番外篇:将冷却缩减属性应用到技能冷却中

在技能基类CGameplayAbility中添加浮点数

	// 技能冷却UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "Cooldown")FScalableFloat CooldownDuration;

技能的冷却时长就不放在GE里了,放在技能的里面去设置
在这里插入图片描述

创建一个MMC我就废物利用把之前MMC伤害的直接拿来用了

#pragma once#include "CoreMinimal.h"
#include "GameplayModMagnitudeCalculation.h"
#include "MMC_BaseAttackDamage.generated.h"/*** */
UCLASS()
class UMMC_BaseAttackDamage : public UGameplayModMagnitudeCalculation
{GENERATED_BODY()public:UMMC_BaseAttackDamage();virtual float CalculateBaseMagnitude_Implementation(const FGameplayEffectSpec& Spec) const override;
private:FGameplayEffectAttributeCaptureDefinition CooldownReductionCaptureDef;
};
#include "GAS/MMC/MMC_BaseAttackDamage.h"#include "GAS/Core/CAttributeSet.h"
#include "GAS/Core/CGameplayAbility.h"
#include "GAS/Core/CHeroAttributeSet.h"UMMC_BaseAttackDamage::UMMC_BaseAttackDamage()
{// 获取冷却缩减属性CooldownReductionCaptureDef.AttributeToCapture = UCHeroAttributeSet::GetCooldownReductionAttribute();CooldownReductionCaptureDef.AttributeSource = EGameplayEffectAttributeCaptureSource::Source;// 添加捕获属性RelevantAttributesToCapture.Add(CooldownReductionCaptureDef);
}float UMMC_BaseAttackDamage::CalculateBaseMagnitude_Implementation(const FGameplayEffectSpec& Spec) const
{FAggregatorEvaluateParameters EvalParams;// 绑定源/目标标签EvalParams.SourceTags = Spec.CapturedSourceTags.GetAggregatedTags();EvalParams.TargetTags = Spec.CapturedTargetTags.GetAggregatedTags();// 获取Ability实例const UCGameplayAbility* Ability = Cast<UCGameplayAbility>(Spec.GetContext().GetAbilityInstance_NotReplicated());if (!Ability) return 0.0f;// 获取基础冷却时间float BaseCooldown = Ability->CooldownDuration.GetValueAtLevel(Ability->GetAbilityLevel());// 获取冷却缩减属性值float CooldownReduction = 0.f;//(通过CooldownReductionCaptureDef定义的捕获规则)GetCapturedAttributeMagnitude(CooldownReductionCaptureDef, Spec, EvalParams, CooldownReduction);	// 获取源的属性值// 计算冷却float ActualCooldown = BaseCooldown * (1.0f - CooldownReduction/100.0f);return FMath::Max(0.1f, ActualCooldown);
}

修改一下函数库CAbilitySystemStatics中获取技能冷却的函数GetCooldownDurationFor

float UCAbilitySystemStatics::GetCooldownDurationFor(const UGameplayAbility* AbilityCDO,const UAbilitySystemComponent& ASC, int AbilityLevel)
{float CooldownDuration = 0.f;if (AbilityCDO){const UCGameplayAbility* Ability = Cast<UCGameplayAbility>(AbilityCDO);if (!Ability) return CooldownDuration;// 获取基础冷却时间float BaseCooldown = Ability->CooldownDuration.GetValueAtLevel(AbilityLevel);// 获取冷却缩减属性值bool bFound;float CooldownReduction = ASC.GetGameplayAttributeValue(UCHeroAttributeSet::GetCooldownReductionAttribute(), bFound);if (bFound){// 计算最终冷却时间CooldownDuration = BaseCooldown * (1.0f - CooldownReduction/100.0f);}}// 返回绝对值(确保冷却时间始终为正数)return FMath::Abs(CooldownDuration);
}

冷却的GE的持续时间然后调用计算类把做好的mmc放进去
在这里插入图片描述

初始化的时候修改一下这里
在这里插入图片描述
如此一来算是成功了吗
在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/604763.html

相关文章:

  • 设计模式十四:适配器模式(Adapter Pattern)
  • Linux ps -ef 命令解析
  • 基于成像空间转录组技术的肿瘤亚克隆CNV原位推断方法
  • composer 常用命令
  • 智慧城市SaaS平台|市政公用管理系统
  • 从单机到分布式:Redis如何成为架构升级的胜负手
  • 串口接收数据包(协议带帧头帧尾)的编程实现方法:1、数据包格式定义结构体2、使用队列进行数据接收、校验解包
  • 三十二、【Linux网站服务器】搭建httpd服务器演示虚拟主机配置、网页重定向功能
  • uni-app webview 的message无法触发的解决方案
  • MacTex+Vscode数学建模排版
  • 字节跳动“扣子”(Coze)开源:AI智能体生态的技术革命
  • AI Compass前沿速览:可灵创意工坊、字节Coze StudioCoze Loop、通义万相2.2 、智谱GLM-4.5、腾讯混元3D世界模型开源
  • 添加捕捉吸附标识(使用QT+OpenGL开发三维CAD)
  • 【翻译】Label Studio——开源标注工具README.md
  • 2025年DDoS攻防战:六层防护体系构建业务“数字免疫”
  • ADA4622-2ARMZ-R7 ADI双通道精密运算放大器 ±0.25μV超低失调+0.1μV/°C温漂
  • K8s 备份与恢复利器:Velero 实战指南
  • click和touch事件触发顺序 糊里糊涂解决的奇怪bug
  • VUE -- 基础知识讲解(三)
  • 前端安全防护:XSS、CSRF与SQL注入漏洞深度解析与防御
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | 3dBackgroundBoxes(3D背景盒子组件)
  • 前端兼容性问题全面解决方案
  • Vue2-封装一个看起来像左右分布表格的表单组件
  • JetBrains Annotations:从入门到落地,彻底告别 NullPointerException
  • 2025年GEO服务商有哪些?——从技术到服务的专业分析
  • 2507C++,介绍名字对象
  • Java Stream核心:ReferencePipeline解析
  • 【WPS】邮件合并教程\Excel批量写入数据进Word模板
  • 滚珠导轨在电子制造中的流畅性优势
  • 新零售“实—虚—合”逻辑下的技术赋能与模式革新:基于开源AI大模型、AI智能名片与S2B2C商城小程序源码的研究