概述
本文介绍Gameplay Ability System中的游戏效果上下文的用法,以及如何自定义上下文数据。
游戏效果
根据GASDocumentation,游戏效果上下文 是GAS中的一个特殊结构体,用于在GAS的各个应用流程(MMC/Execution,AttributeSets以及GameplayCues)中传递相关的上下文数据,
同时,也可以通过C++自定义该结构体,以添加自定义数据。
由于自定义游戏效果上下文需要强制使用C++,这位蓝图开发者在利用GAS实现高级特性时,带来了诸多不便!
因此,GGA提供了更优秀的解决方案,即游戏效果上下文数据系统。
上下文数据系统
GGA提供一个自定义的上下文结构体:GGA_GameplayEffectContext,其内部包含一组InstancedStruct结构体,允许你动态添加/移除任意数据到其中, 这些数据可以理解为“上下文数据”。
同时GGA提供了简单的API可以通过蓝图或者C++,获取上下文数据,或对其进行修改。
下图是使用这些API的案例:

注意
要使用上下文数据系统,你需要在项目设置->GameplayAbilitiesSettings->AbilitySystemGlobalsClass中选择GGA_AbilitySystemGlobals。
最佳实践
你可以使用任意蓝图/C++结构体作为上下文数据,然而。为了让这些数据能够正常地进行网络序列化,结构体内的字段类型本身必须支持网络序列化。
同时,我推荐采用以ContextPayload_XXX形式为你的上下文数据的结构体类型命名。
在我的战斗系统中,我采用FGCS_ContextPayload_Combat来存储所有与战斗相关的上下文数据。
