首页 > 其他分享 >关于UE GAS GameplayEffect中SetByCaller的解析

关于UE GAS GameplayEffect中SetByCaller的解析

时间:2023-08-28 18:01:48浏览次数:43  
标签:FGameplayEffectSpec const SetByCaller GameplayEffect float GAS Magnitude bool

在GAS中,GameplayEffect(简称GE)里面,在涉及到Magnitude的地方,针对Magnitude Calculation Type都会有一个选项“Set By Caller”,其本质,是把Magnitude的具体数值,交由开发者在代码中决定。
image.png
如果设置为“Set By Caller”,它都需要填写一个Data Tag,其本质是,在GameplayEffect实例中,它有一个字典"SetByCallerTagMagnitudes",其声明如下

TMap<FGameplayTag, float> SetByCallerTagMagnitudes;

在ApplyGameplayEffectSpecToOwner时,会有以下计算,本质就是在字典"SetByCallerTagMagnitudes"中获取Magnitude的值。

FActiveGameplayEffectHandle UAbilitySystemComponent::ApplyGameplayEffectSpecToSelf(const FGameplayEffectSpec &Spec, FPredictionKey PredictionKey)
{
// ...
AppliedEffect = ActiveGameplayEffects.ApplyGameplayEffectSpec(Spec, PredictionKey, bFoundExistingStackableGE);
}

FActiveGameplayEffect* FActiveGameplayEffectsContainer::ApplyGameplayEffectSpec(const FGameplayEffectSpec& Spec, FPredictionKey& InPredictionKey, bool& bFoundExistingStackableGE)
{
// ...
if (AppliedEffectSpec.AttemptCalculateDurationFromDef(DefCalcDuration))
{
AppliedEffectSpec.SetDuration(DefCalcDuration, false);
}
}

bool FGameplayEffectSpec::AttemptCalculateDurationFromDef(OUT float& OutDefDuration) const
{
else
{
// The last parameters (false, 1.f) are so that if SetByCaller hasn't been set yet, we don't warn and default
// to 1.f. This is so that the rest of the system doesn't treat the effect as an instant effect. 1.f is arbitrary
// and this makes it illegal to SetByCaller something into an instant effect.
bCalculatedDuration = Def->DurationMagnitude.AttemptCalculateMagnitude(*this, OutDefDuration, false, 1.f);
}

return bCalculatedDuration;
}

bool FGameplayEffectModifierMagnitude::AttemptCalculateMagnitude(const FGameplayEffectSpec& InRelevantSpec, OUT float& OutCalculatedMagnitude, bool WarnIfSetByCallerFail, float DefaultSetbyCaller) const
{
case EGameplayEffectMagnitudeCalculation::SetByCaller:
{
OutCalculatedMagnitude = InRelevantSpec.GetSetByCallerMagnitude(SetByCallerMagnitude.DataTag, WarnIfSetByCallerFail, DefaultSet
}
}

float FGameplayEffectSpec::GetSetByCallerMagnitude(FGameplayTag DataTag, bool WarnIfNotFound, float DefaultIfNotFound) const
{
float Magnitude = DefaultIfNotFound;
const float* Ptr = nullptr;
{
Ptr = SetByCallerTagMagnitudes.Find(DataTag);
}
{
Magnitude = *Ptr;
}

return Magnitude;
}

因为GE中有很多地方可以用到Set By Caller,所以就需要给Set By Caller的Magnitude一个Data Tag,用来区分不同的地方。它是在GE内部使用的Tag。

标签:FGameplayEffectSpec,const,SetByCaller,GameplayEffect,float,GAS,Magnitude,bool
From: https://www.cnblogs.com/cgsgood/p/17663032.html

相关文章

  • RTaW-Pegase构建可预测QoS的TSN网络架构
    1.设计下一代面向服务的E/E架构当今汽车上多达数以百计的ECU(电子控制单元),MCU(微控制处理器单元)及其上面运行着的大量的嵌入式软件代码,以及复杂的CAN、LIN、FlexRay等整车通讯网络决定了汽车不同于其他的IOT设备或智能手机。汽车上的电子电气架构一直在朝着为智能化和体验服务的方......
  • Vegas Pro(视频处理)电脑版-Vegas Pro(视频处理)下载 官方版特色
    VegasPro是一个视频剪辑工具,我们可以使用这个软件来制作各种奇幻的视频。因为我们可以在里面添加各种特效和转场,让你的视频看起来更有观赏性。支持自由建立图层,在图层中添加素材,合并在一起,让视频内容更丰富,还有视频模板可以直接套用,功能强大等你来体验。软件地址:看置顶贴软件功能1......
  • Vegas Pro电脑版下载_Vegas Pro(视频处理)官方最新版 官方版特色
    软件特色1、【HDR颜色支持】完全支持VEGASPro16现在包含的高动态范围(HDR)颜色,您可以使用最新相机的视频片段,在HDR参考监视器上预览您的工作,并提供令人惊叹的HDR工作。2、【支持4KUHD高清画面】在每一个项目中实现惊人的质量。智能化技术能够在您的4K产品中使用你存档的高清画面......
  • AbilityInputComponent,支持EnhancedInputComponent和GAS的操作映射
    目前完成进度输入系统的基本搭建​ 支持输入按键触发对应的Ability,同时支持按键的按下和释放两种状态的区分并可以在代码或蓝图中自定义特殊逻辑能力输入系统详解​ 通过配置文件来保存Action和Ability的对应关系,对应的关键词条就是GameplayTag。通过一个GameplayTag可以找到......
  • C# 后端请求 PostAsync GetStringAsync
     stringsendUrl=$"http://10.172.1.20/wtoptst/ws/r/awsp920";HttpClientsendclient=newHttpClient();stringtestStr=JsonConvert.SerializeObject(reques);//查看内容(测试用)HttpConten......
  • Silhouette 2023.0.1 CE 影视后期ROTO跟踪抠像合成软件 支持AE/PR/达芬奇/VEGAS/OFX插
    Silhouette是一款被广泛应用于影视剧中Roto、抠像、擦威亚的特效合成辅助软件,正所谓术业有专攻,它就是为了应对这些脏活累活而诞生的。之前还有一款软件CommotionPro,但是已经停止开发,目前已经被这款Silhouette所替代,目前它也属于BorisFX家族的一员。软件下载Silhouette2023.......
  • unity将安卓streamingAssetsPath文件复制到persistentDataPath
    privatevoidTestCopy(){stringfrom=Application.streamingAssetsPath+"/Test/test.txt";stringto=Application.persistentDataPath+"/Test/";CopyFile(from,to);}publicstaticvoidCopyFile(stringsourcePath,stringdesti......
  • [论文阅读] GAS-NeXt@Few-Shot Cross-Lingual Font Generator
    Pretitle:GAS-NeXt:Few-ShotCross-LingualFontGeneratoraccepted:arxiv2022paper:https://arxiv.org/abs/2212.02886code:https://github.com/cmu-11785-F22-55/GAS-NeXt关键词:few-shot,cross-lingual,fontgeneration阅读理由:新作,有代码,简单易读(快速应对组会),......
  • GASA-BP基于遗传模拟退火优化BP神经网络的回归预测 案例包括GA与SA优化B
    GASA-BP基于遗传模拟退火优化BP神经网络的回归预测案例包括GA与SA优化BP代码,并给出对比计算结果matlab代码,备注详细,方便初学者学习ID:2530705617259360......
  • Unreal-GAS-2-AttributeSet
    这篇随笔用于忘记AttributeSet是什么后快速想起来和上手AttributeSet属性集是表示Actor各种属性值的集合,保存在ASC中,是GE的主要作用目标比如继承一个AttributeSet后新建公有成员变量:UPROPERTY(BlueprintReadOnly,Category="Health",ReplicatedUsing=OnRep_Health)FGam......