12、GAS 更新日志

12. GAS 更新日志

这是一个GAS的显著变化列表(修复、改动和新特性),包括了官方Unreal Engine升级更新日志以及我遇到的未记录的变化。如果你发现有未列出的内容,请提一个issue或pull request。

5.3

  • 崩溃修复:修复了在无缝旅行后尝试应用Gameplay Cues时崩溃的问题。
  • 崩溃修复:修复了在使用Live Coding时,由于GlobalAbilityTaskCount导致的崩溃问题。
  • 崩溃修复:修复了UAbilityTask::OnDestroy在递归调用时不会崩溃,适用于像UAbilityTask_StartAbilityState这类情况。
  • 错误修复:现在在子类中调用Super::ActivateAbility是安全的。之前,它会调用CommitAbility
  • 错误修复:添加了正确复制不同类型的FGameplayEffectContext的支持。
  • 错误修复:FGameplayEffectContextHandle现在在检索“Actors”之前会检查数据是否有效。
  • 错误修复:保留Gameplay Ability System Target Data的旋转信息。
  • 错误修复:只有在找到有效PC时,Gameplay Ability System才会停止搜索PC。
  • 错误修复:在RemoveGameplayCue_Internal中,如果存在现有的GameplayCueParameters,则使用它,而不是默认的参数对象。
  • 错误修复:GameplayAbilityWorldReticle现在朝向源Actor,而不是TargetingActor。
  • 错误修复:如果传入了触发事件数据,并且能力列表被锁定,则缓存触发事件数据。
  • 错误修复:添加了对FInheritedGameplayTags的支持,使其CombinedTags立即更新,而不是等待保存时更新。
  • 错误修复:将ShouldAbilityRespondToEvent从仅客户端代码路径移动到服务器和客户端代码路径。
  • 错误修复:修复了FAttributeSetInitterDiscreteLevels在Cooked Builds中无法正常工作的问题,原因是Curve Simplification。
  • 错误修复:设置GameplayAbility中的CurrentEventData。
  • 错误修复:确保在可能执行回调之前正确设置MinimalReplicationTags。
  • 错误修复:修复了ShouldAbilityRespondToEvent未在实例化的GameplayAbility上被调用的问题。
  • 错误修复:修复了在gc.PendingKill被禁用时,执行在Child Actors上的Gameplay Cue Notify Actors时内存泄漏的问题。
  • 错误修复:修复了GameplayCueManager中由于哈希碰撞,GameplayCueNotify_Actors可能“丢失”的问题。
  • 错误修复:即使Actor上没有Gameplay标签,WaitGameplayTagQuery也会遵守其查询条件。
  • 错误修复:PostAttributeChange和AttributeValueChangeDelegates现在将具有正确的OldValue。
  • 错误修复:修复了FGameplayTagQuery未能正确显示查询描述的问题,尤其是在由本地代码创建结构时。
  • 错误修复:确保如果正在使用Ability System,则调用UAbilitySystemGlobals::InitGlobalData。之前如果用户没有调用它,Gameplay Ability System将无法正常工作。
  • 错误修复:修复了在链接/取消链接动画层时出现的问题,这些问题发生在UGameplayAbility::EndAbility中。
  • 错误修复:更新了Ability System Component函数,检查Spec的能力指针是否在使用之前有效。
  • 新特性:添加了GameplayTagQuery字段到FGameplayTagRequirements中,以便可以指定更复杂的需求。
  • 新特性:引入了FGameplayEffectQuery::SourceAggregateTagQuery来扩展SourceTagQuery。
  • 新特性:扩展了从控制台命令执行和取消Gameplay Abilities和Gameplay Effects的功能。
  • 新特性:添加了在Gameplay Ability蓝图上执行“审核”的能力,显示有关其开发和使用意图的信息。
  • 改动:OnAvatarSet现在在实例化的每个Actor的主实例上调用,而不是在CDO上调用。
  • 改动:允许在同一Gameplay Ability图中同时使用Activate Ability和Activate Ability From Event。
  • 改动:AnimTask_PlayMontageAndWait现在有一个切换按钮,允许在BlendOut事件后完成和中断。
  • 改动:ModMagnitudeCalc包装函数已声明为const。
  • 改动:FGameplayTagQuery::Matches现在对空查询返回false。
  • 改动:更新了FGameplayAttribute::PostSerialize,使其包含的属性被标记为可搜索的名称。
  • 改动:更新了GetAbilitySystemComponent,使默认参数为Self。
  • 改动:将函数标记为虚拟函数,在AbilityTask_WaitTargetData中。
  • 改动:移除了未使用的函数FGameplayAbilityTargetData::AddTargetDataToGameplayCueParameters。
  • 改动:移除了遗留的GameplayAbility::SetMovementSyncPoint。
  • 改动:移除了未使用的复制标志,适用于Gameplay任务和Ability系统组件。
  • 改动:将一些Gameplay效果功能移入可选组件中。所有现有内容将在PostCDOCompiled期间自动更新为使用组件(如有必要)。

https://docs.unrealengine.com/5.3/en-US/unreal-engine-5.3-release-notes/

5.2

  • 错误修复:修复了UAbilitySystemBlueprintLibrary::MakeSpecHandle函数中的崩溃问题。
  • 错误修复:修复了在Gameplay Ability System中,一个非控制Pawn会被错误地视为远程Pawn的问题,即使它是在服务器上本地生成的(例如,车辆)。
  • 错误修复:正确设置了被服务器拒绝的预测实例能力的激活信息。
  • 错误修复:修复了会导致GameplayCues在远程实例上卡住的问题。
  • 错误修复:修复了链式调用WaitGameplayEvent时的内存泄漏问题。
  • 错误修复:在蓝图中调用AbilitySystemComponent的GetOwnedGameplayTags()函数时,不再保留先前调用的返回值。
  • 错误修复:修复了GameplayEffectContext复制一个动态对象引用的问题,这个对象永远不会被复制。
    • 这导致GameplayEffect无法调用Owner->HandleDeferredGameplayCues(this),因为bHasMoreUnmappedReferences总是为true。
  • 新特性:增加了Gameplay Targeting System的支持,允许通过数据驱动的方式创建目标请求。
  • 新特性:为GameplayTag查询添加了自定义序列化支持。
  • 新特性:添加了对派生类型FGameplayEffectContext的复制支持。
  • 新特性:在资产中,Gameplay Attributes现在会在保存时注册为可搜索的名称,允许在引用查看器中看到属性的引用。
  • 新特性:为AbilitySystemComponent添加了一些基本的单元测试。
  • 新特性:Gameplay Ability System Attributes现在遵守Core Redirects。这意味着你可以在代码中重命名Attribute Sets和它们的属性,并通过在DefaultEngine.ini中添加重定向条目,确保以旧名称保存的资产能够正确加载。
  • 改动:允许从代码中更改Gameplay Effect Modifier的评估通道。
  • 改动:移除了以前未使用的变量FGameplayModifierInfo::Magnitude
  • 改动:移除了Ability系统组件与Smart Object实例标签之间的同步逻辑。

https://docs.unrealengine.com/5.2/en-US/unreal-engine-5.2-release-notes/

5.1

  • 错误修复:修复了复制的松散游戏标签未复制到所有者的问题。
  • 错误修复:修复了 AbilityTask 错误,该错误可能导致能力无法及时进行垃圾收集。
  • 错误修复:修复了基于标签监听激活的游戏能力无法激活的问题。如果有多个游戏能力监听此标签,并且列表中的第一个无效或没有激活权限,就会发生这种情况。
  • 错误修复:修复了正确使用数据注册表的 GameplayEffects 加载时发出警告的问题,并改进了警告文本。
  • 错误修复:从 UGameplayAbility 中删除了错误地仅向 Blueprint 调试器注册最后一个实例能力的代码,用于断点。
  • 错误修复:修复了如果在 ApplyGameplayEffectSpecToTarget 中的锁定期间调用 EndAbility,游戏能力系统能力会卡住的问题。
  • 新增:添加了对游戏效果的支持,以添加阻止的能力标签。
  • 新增:添加了 WaitGameplayTagQuery 节点。一个基于 UAbilityTask,另一个基于 UAbilityAsync。此节点指定 TagQuery,并将根据配置在查询变为真或假时触发其输出引脚。
  • 新增:修改了控制台变量中的 AbilityTask 调试,以启用调试记录并默认打印到非发布版本中的日志中(可以根据需要打开/关闭修补程序)。
  • 新增:您现在可以将 AbilitySystem.AbilityTask.Debug.RecordingEnabled 设置为 0 以禁用,设置为 1 以在非发布版本中启用,设置为 2 以启用所有版本(包括发布版本)。
  • 新增:您可以使用 AbilitySystem.AbilityTask.Debug.AbilityTaskDebugPrintTopNResults 仅在日志中打印前 N 个结果(以避免日志垃圾邮件)。
  • 新增:STAT_AbilityTaskDebugRecording 可用于测试这些默认调试更改对性能的影响。
  • 新增:添加了一个调试命令来过滤 GameplayCue 事件。
  • 新增:向游戏能力系统添加了新的调试命令 AbilitySystem.DebugAbilityTags、AbilitySystem.DebugBlockedTags 和 AbilitySystem.DebugAttribute。
  • 新增:添加了一个蓝图函数来获取游戏属性的调试字符串表示。
  • 新增:添加了一个新的游戏任务资源重叠策略来取消现有任务。
  • 更改:现在能力任务应确保仅在对能力指针执行任何需要的操作后才调用 Super::OnDestroy,因为调用后它将被清空。
  • 更改:将 FGameplayAbilitySpec/Def::SourceObject 转换为弱引用。
  • 更改:将能力任务中的能力系统组件引用设为弱指针,以便垃圾收集可以将其删除。
  • 更改:删除了多余的枚举 EWaitGameplayTagQueryAsyncTriggerCondition。
  • 更改:GameplayTasksComponent 和 AbilitySystemComponent 现在支持已注册的子对象 API。
  • 更改:添加了更好的日志记录以指示 Gameplay 能力无法激活的原因。
  • 更改:删除了 AbilitySystem.Debug.NextTarget 和 PrevTarget 命令,转而使用全局 HUD NextDebugTarget 和 PrevDebugTarget 命令。

https://docs.unrealengine.com/5.1/en-US/unreal-engine-5.1-release-notes/

5.0

https://docs.unrealengine.com/5.0/en-US/unreal-engine-5.0-release-notes/

4.27

  • 崩溃修复:修复了根运动源问题,即当 Actor 完成使用具有强度随时间变化的修饰符的恒定力根运动任务的能力时,联网客户端可能会崩溃。
  • 错误修复:修复了使用 GameplayCues 时编辑器加载时间的回归问题。
  • 错误修复:如果设置相同的 EffectLevel,GameplayEffectsContainer 的 SetActiveGameplayEffectLevel 方法将不再污染 FastArray。
  • 错误修复:修复了 GameplayEffect 混合复制模式中的一种极端情况,即未明确由网络连接拥有但利用 GetNetConnection 连接的 Actor 将不会收到混合复制更新。
  • 错误修复:修复了 GameplayAbility 类方法“EndAbility”中发生的无限递归,该方法是通过从“K2_OnEndAbility”再次调用“EndAbility”来调用的。
  • 错误修复:如果在注册标签之前加载 GameplayTags 蓝图引脚,则它们将不再被默默清除。它们现在的工作方式与 GameplayTag 变量相同,并且可以使用项目设置中的 ClearInvalidTags 选项更改两者的行为。
  • 错误修复:改进了 GameplayTag 操作的线程安全性。
  • 新功能:将 SourceObject 暴露给 GameplayAbility 的“K2_CanActivateAbility”方法。
  • 新功能:原生 GameplayTags。引入了新的“FNativeGameplayTag”,这使得在加载和卸载模块时可以执行正确注册和取消注册的一次性原生标签。
  • 新功能:更新了“GiveAbilityAndActivateOnce”以传入 FGameplayEventData 参数。
  • 新功能:改进了 GameplayAbilities 插件中的 ScalableFloats,以支持从新的数据注册系统中动态查找曲线表。添加了 ScalableFloat 标头,以便更轻松地在 capabilities 插件之外重用通用结构。
  • 新功能:添加了代码支持,用于通过 GameplayTagsEditorModule 在其他编辑器自定义中使用 GameplayTag UI。
  • 新功能:修改了 UGameplayAbility 的 PreActivate 方法,以选择性地接收触发事件数据。
  • 新功能:添加了更多支持,以使用项目特定的过滤器在编辑器中过滤 GameplayTags。OnFilterGameplayTag 提供引用属性和标签源,因此您可以根据请求标签的资产过滤标签。
  • 新功能:添加了选项,用于在初始化后调用 GameplayEffectSpec 的类方法 SetContext 时保留原始捕获的 SourceTags。
  • 新功能:改进了用于从特定插件注册 GameplayTags 的 UI。新的标签 UI 现在允许您为新添加的 GameplayTag 源选择磁盘上的插件位置。
  • 新增:在 Sequencer 中添加了一条新轨道,允许在使用 GameplayAbiltiySystem 构建的 Actors 上触发通知状态。与通知一样,GameplayCueTrack 可以利用基于范围的事件或基于触发器的事件。
  • 更改:将 GameplayCueInterface 更改为通过引用传递 GameplayCueParameters 结构。
  • 优化:对加载和重新生成 GameplayTag 表进行了多项性能改进,以便优化此选项。

https://docs.unrealengine.com/en-US/WhatsNew/Builds/ReleaseNotes/4_27/

4.26

  • GAS 插件不再被标记为测试版。
  • 崩溃修复:修复了在未选择有效标签源的情况下添加游戏标签时发生的崩溃。
  • 崩溃修复:将路径字符串参数添加到消息中以修复 UGameplayCueManager::VerifyNotifyAssetIsInValidPath 中的崩溃。
  • 崩溃修复:修复了在未检查 ptr 的情况下使用 AbilitySystemComponent_Abilities 时发生的访问冲突崩溃。
  • 错误修复:修复了堆叠 GE 时未重置正在应用的效果的其他实例的持续时间的错误。
  • 错误修复:修复了导致 CancelAllAbilities 仅取消非实例化能力的问题。
  • 新增:向游戏能力提交函数添加了可选标签参数。
  • 新增:向 PlayMontageAndWait 能力任务添加了 StartTimeSeconds 并改进了注释。
  • 新增:向 FGameplayAbilitySpec 添加了标签容器“DynamicAbilityTags”。这些是随规范复制的可选能力标签。它们也被应用的游戏效果捕获为源标签。
  • 新增:GameplayAbility IsLocallyControlled 和 HasAuthority 函数现在可以从蓝图调用。
  • 新增:如果我们当前正在记录可视化日志数据,可视化记录器现在将仅收集和存储有关即时 GE 的信息。
  • 新增:添加了对蓝图节点中游戏属性引脚上的重定向器的支持。
  • 新增:添加了新功能,当根运动移动相关的能力任务结束时,它们将使移动组件的移动模式返回到任务开始前的移动模式。

https://docs.unrealengine.com/en-US/WhatsNew/Builds/ReleaseNotes/4_26/

4.25.1

  • 已修复! UE-92787 使用 Get Float Attribute 节点保存蓝图时崩溃,并且属性引脚是内联设置的
  • 已修复!UE-92810 生成 Actor 时崩溃,该 Actor 具有可编辑实例的游戏标记属性,并且该属性标记属性是内联更改的

4.25

  • 修复了 RootMotionSource AbilityTasks 的预测
  • GAMEPLAYATTRIBUTE_REPNOTIFY() 现在还接受旧的 Attribute 值。我们必须将其作为可选参数提供给我们的 OnRep 函数。以前,它会读取属性值以尝试获取旧值。但是,如果从复制函数调用,旧值在到达 SetBaseAttributeValueFromReplication 之前已被丢弃,因此我们将获得新值。
  • NetSecurityPolicy 添加到 UGameplayAbility
  • 崩溃修复:修复了在没有有效标签源选择的情况下添加游戏标签时发生的崩溃。
  • 崩溃修复:删除了攻击者通过能力系统使服务器崩溃的几种方法。
  • 崩溃修复:我们现在确保在检查标签要求之前具有 GameplayEffect 定义。
  • 错误修复:修复了游戏标签类别不适用于蓝图中的函数参数(如果它们是函数终止节点的一部分)的问题。
  • 错误修复:修复了游戏效果的标签无法通过多个视口复制的问题。
  • 错误修复:修复了在循环触发能力时,InternalTryActivateAbility 函数可能使游戏能力规范无效的错误。
  • 错误修复:更改了我们在标签计数容器内处理更新游戏标签的方式。当在删除游戏标签的同时推迟父标签的更新时,我们现在将在父标签更新后调用与更改相关的委托。这可确保委托广播时标签表处于一致状态。
  • 错误修复:我们现在在确认目标时在内部迭代生成的目标参与者数组之前复制该数组,因为某些回调可能会修改该数组。
  • 错误修复:修复了一个错误,即堆叠 GameplayEffects 时,如果未重置所应用效果的其他实例的持续时间,并且由调用者设置了持续时间,则只会为堆栈中的第一个实例正确设置持续时间。堆栈中所有其他 GE 规范的持续时间为 1 秒。添加了自动化测试来检测这种情况。
  • 错误修复:修复了处理游戏事件委托修改游戏事件委托列表时可能发生的错误。
  • 错误修复:修复了导致 GiveAbilityAndActivateOnce 行为不一致的错误。
  • 错误修复:重新排序了 FGameplayEffectSpec::Initialize 中的某些操作,以处理潜在的排序依赖关系。
  • 新功能:UGameplayAbility 现在具有 OnRemoveAbility 函数。它遵循与 OnGiveAbility 相同的模式,并且仅在能力的主要实例或类默认对象上调用。
  • 新功能:显示被阻止的能力标签时,调试文本现在包含被阻止标签的总数。
  • 新增:将 UAbilitySystemComponent::InternalServerTryActiveAbility 重命名为 UAbilitySystemComponent::InternalServerTryActivateAbility。调用 InternalServerTryActiveAbility 的代码现在应调用 InternalServerTryActivateAbility。
  • 新增:在添加或删除标签时继续使用过滤器文本显示游戏标签。之前的行为清除了过滤器。
  • 新增:在编辑器中添加新标签时不重置标签源。
  • 新增:添加了查询能力系统组件以获取具有指定标签集的所有活动游戏效果的功能。新函数称为 GetActiveEffectsWithAllTags,可通过代码或蓝图访问。
  • 新增:当根运动移动相关的能力任务结束时,它们现在会将移动组件的移动模式返回到任务开始前的移动模式。
  • 新增:使 SpawnedAttributes 成为瞬态,因此它不会保存可能过时和不正确的数据。添加了空检查,以防止任何当前保存的陈旧数据传播。这可以防止与 SpawnedAttributes 中存储不良数据相关的问题。
  • API 更改:AddDefaultSubobjectSet 已弃用。应改用 AddAttributeSetSubobject。
  • 新功能:游戏能力现在可以指定播放蒙太奇的动画实例。

https://docs.unrealengine.com/en-US/WhatsNew/Builds/ReleaseNotes/4_25/

4.24

  • 修复了蓝图节点 Attribute 变量在编译时重置为 None 的问题。
  • 需要调用 UAbilitySystemGlobals::InitGlobalData() 才能使用 TargetData,否则您将收到 ScriptStructCache 错误,并且客户端将与服务器断开连接。我的建议是现在在每个项目中都调用它,而在 4.24 之前它是可选的。
  • 修复了将 GameplayTag 设置器复制到没有先前定义变量的蓝图时崩溃的问题。
  • UGameplayAbility::MontageStop() 函数现在正确使用 OverrideBlendOutTime 参数。
  • 修复了编辑时未修改组件上的 GameplayTag 查询变量的问题。
  • 增加了 GameplayEffectExecutionCalculations 的功能,以支持针对不需要由属性捕获支持的“临时变量”的范围修饰符。
  • 实现基本上允许创建 GameplayTag 标识的聚合器,作为执行公开要使用范围修饰符进行操作的临时值的一种方式;您现在可以构建需要可操作值的公式,这些值不需要从源或目标捕获。
  • 要使用,执行必须向新成员变量 ValidTransientAggregatorIdentifiers 添加标签;这些标签将显示在底部的范围修饰符的计算修饰符数组中,标记为临时变量 - 并相应地更新详细信息自定义以支持功能
  • 添加了受限标签生活质量改进。删除了受限 GameplayTag 源的默认选项。我们在添加受限标签时不再重置源,以便更轻松地连续添加多个标签。
  • APawn::PossessedBy() 现在将 Pawn 的所有者设置为新的 Controller。这很有用,因为如果 ASC 位于 Pawn 上,则 混合复制模式 要求 Pawn 的所有者是 Controller
  • 修复了 FAttributeSetInitterDiscreteLevels 中 POD(普通旧数据)的错误。

https://docs.unrealengine.com/en-US/WhatsNew/Builds/ReleaseNotes/4_24/