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

02核心-EffectSpec,EffectContext

1.FGameplayEffectSpec   效果Spec

创建:MakeOutGoingSpec=>EffectSpecHandle≈EffectSpec.

创建总结:Effect+Level+EffectContext=>EffectSpec(Handle)

数据:EffectSpec存有效果的等级,上下文,类。
还有很多其他东西:

----------------------------------------EffectSpec中的数据--------------------------------
//调用者通过标签设置给效果的float值。
TMap<FGameplayTag, float>	SetByCallerTagMagnitudes;

//这个效果要给的GA,但是计划移植到GASpec,等下看看GASpec
TArray<FGameplayAbilitySpecDef> GrantedAbilitySpecs;

//层数
int32 StackCount;

//额外(资产)标签,被加入到CapturedSourceTags中
FGameplayTagContainer DynamicAssetTags;

//额外要贴的标签
FGameplayTagContainer DynamicGrantedTags;

//效果修改器计算后的值的列表,要填充
TArray<FModifierSpec> Modifiers;

//创建效果时来源的标签
FTagContainerAggregator	CapturedSourceTags;

//创建效果时目标的标签 - Aggregator中组合了各方的标签,哪些各方?
FTagContainerAggregator	CapturedTargetTags;

//效果的周期,FGameplayEffectConstants::NO_PERIOD(无周期)
float Period;

//效果的时长,FGameplayEffectConstants::INSTANT_APPLICATION(瞬时效果)/DURATION(不限时效果)
float Duration;

//如果应用成功,还要应用的效果。(连锁反应?)
TArray< FGameplayEffectSpecHandle > TargetEffectSpecs;

//捕获到的属性(源和目标都在这里面),用于自定义计算伤害,仅存在于服务器上。
FGameplayEffectAttributeCaptureSpecContainer CapturedRelevantAttributes;

//效果修改到的属性(用于通知效果更改的吧。)
TArray<FGameplayEffectModifiedAttribute> ModifiedAttributes;

//源和目标的标签。DynamicAssetTag也在源标签里。
FTagContainerAggregator	CapturedSourceTags;
FTagContainerAggregator	CapturedTargetTags;

//被修改了的属性还有修改幅度
TArray<FGameplayEffectModifiedAttribute> ModifiedAttributes;

ModifierSpec里就存了一个修改器处理后的float,包裹一层只让朋友改EffectSpec和FActiveGameplayEffectsContainer

有些有用(懵逼)的函数:


//不知道什么意思
float CalculateModifiedDuration() const;

//GESpec中有Capture概念,比较模糊。跟技能时长什么关系。什么OutGoingDurationCapture InComingDurationCapture的
void SetupAttributeCaptureDefinitions();

//重新捕获源的标签。因为一开始就捕获了,可能过一段时间效果才生效,
在捕获一下看看能不能生效,要怎么生效什么的。
void RecaptureSourceActorTags();

从GE中取出修改器进行修改,然后填充到Modifier。FModifierSpec& ModSpec = Modifer[ModIdx]用的引用,Attemp....参数也是引用。所以是直接修改的Modifier中的元素。

获取上一个函数计算出来的列表中的某个元素,第二个参数是否考虑层数?

计算目标的的属性,当然还有Source版本,不过是Private

	virtual void GetOwnedGameplayTags
(OUT FGameplayTagContainer& ActorTagContainer,
 OUT FGameplayTagContainer& SpecTagContainer) const;

还有GetterSetter。特殊的是:

AllGrantedTag(GE的+DynamicGrantedTags),

BlockedAbilityTag(GE的),

AllAssetTag(GE的+DynamicAssetTags)

的Getter

2.FGameplayEffectContext  效果上下文

创建:MakeEffectContext() =>ContextHandle(这些什么什么Handle没什么实际卵用,但都有一些网络复制相关的内容。)约等于Context。

创建总结:设置了Instigator为ASC的OwnerActor,EffectCauser为ASC的AvatarActor,还设置了InstigatorASC。

EffectContext中的数据:

//应该指效果发生时的效果来源的世界坐标吧???
FVector	WorldOrigin;
//Actor啦
TArray<TWeakObjectPtr<AActor>> Actors;
//HitResult啦
TSharedPtr<FHitResult>	HitResult;
//效果来源
TWeakObjectPtr<UObject> SourceObject;
//技能等级,跟效果差不多吧。
int32 AbilityLevel;
//技能CDO
TWeakObjectPtr<UGameplayAbility> AbilityCDO;

//来源的信息。
TWeakObjectPtr<AActor> Instigator;
TWeakObjectPtr<AActor> EffectCauser;
TWeakObjectPtr<UAbilitySystemComponent> InstigatorAbilitySystemComponent;

数据总结:存储了来源的ASC,OwnerActor,AvartarActor(SourceObject干嘛用的?

/** Object this effect was created from, can be an actor or static object. Useful to bind an effect to a gameplay object */

),来源技能的CDO和等级,还有来源的世界坐标啦,额外信息还有HitResult,Actors.
提供的函数就是一些GetterSetter没啥有用的。

---涉及Duration的函数都非常模糊,待我继续看源码理清楚这是个什么玩意。未完待续

相关文章:

  • RV1106 OCR 识别算法
  • 代码随想录算法训练营day3(链表)
  • 流与分组的共生关系
  • vue + uniapp 实现仿百度地图/高德地图/美团/支付宝 滑动面板 纯css 实现
  • Matlab个性化绘图第10期—滑珠进度柱状图
  • 富文本编辑器的内容导出html,并保留图片
  • 【第41节】windows的中断与异常及异常处理方式
  • 【第四十周】文献阅读:用于检索-增强大语言模型的查询与重写
  • 精品整理 | 云安全知识证书 (CCSK) v5 备考学习资源汇总
  • Reinforcement Learning-Autonomous car-useful
  • 【数学建模】(智能优化算法)粒子群优化算法(PSO)详解与Python实现
  • 【STM32】STemWin库,使用template API
  • vs2022 pcl1.15.0注意点
  • 实现当文本内容过长时,中间显示省略号...,两端正常展示
  • K8S+Prometheus+Consul+alertWebhook实现全链路服务自动发现与监控、告警配置实战
  • GitHub 趋势日报 (2025年04月12日)
  • 【C++】继承:万字总结
  • 《2025四大AI终极对决:如何用ChatGPT、DeepSeek、通义千问和文心一言提升项目管理效率?》
  • STM32 HAL库SPI读写W25Q128(软件模拟+硬件spi)
  • Python基础总结(四)之元组
  • 上百家单位展示AI+教育的实践与成果,上海教育博览会开幕
  • 通往国际舞台之路:清政府与万国公会的交往
  • 辽宁盘山县一乡镇幼儿园四名老师被指多次殴打一女童,均被行拘
  • 外企聊营商|威能集团:公平环境增“暖”意
  • 联合国第二届运动会闭幕,刘国梁受邀成为“联合国运动会大使”
  • 费高云不再担任安徽省人民政府副省长