4、GAS相关概念4.9 Ability System Globals

4.9 Ability System Globals

AbilitySystemGlobals 类保存有关于 GAS 的全局信息。大多数变量可以从 DefaultGame.ini 中设置。一般来说,你不需要与这个类交互,但你应该知道它的存在。如果你需要子类化像 GameplayCueManagerGameplayEffectContext 这样的东西,你必须通过 AbilitySystemGlobals 来实现。

要子类化 AbilitySystemGlobals,在 DefaultGame.ini 中设置类名:

[/Script/GameplayAbilities.AbilitySystemGlobals]  
AbilitySystemGlobalsClassName="/Script/ParagonAssets.PAAbilitySystemGlobals"  

4.9.1 InitGlobalData()

在 UE 4.24 到 5.2 之间,需要调用 UAbilitySystemGlobals::Get().InitGlobalData() 来使用 TargetData,否则你会遇到与 ScriptStructCache 相关的错误,并且客户端会从服务器断开连接。此函数在项目中只需调用一次。Fortnite 从 UAssetManager::StartInitialLoading() 调用它,而 Paragon 从 UEngine::Init() 调用它。我发现把它放在 UAssetManager::StartInitialLoading() 是一个不错的地方,如示例项目中所示。我会将此视为样板代码,你应该复制到项目中以避免与 TargetData 相关的问题。从 5.3 开始,它会自动调用。

如果你在使用 AbilitySystemGlobalsGlobalAttributeSetDefaultsTableNames 时遇到崩溃,你可能需要稍后调用 UAbilitySystemGlobals::Get().InitGlobalData(),例如在 AssetManager 中,或者在 GameInstance 中。