AbilitySystemGlobals
类保存这GAS的全局信息。其中大多数的变量可以在DefaultGame.ini
中设置。通常你是不会用到这个类的,但是你需要知道它的存在。如果你需要去继承GameplayCueManager
或者GameplayEffectContext
,你就的要在AbilitySystemGlobals
上做一些文章。
为了继承AbilitySystemGlobals
,要在DefaultGame.ini
中设置类名:
[/Script/GameplayAbilities.AbilitySystemGlobals]
AbilitySystemGlobalsClassName="/Script/ParagonAssets.PAAbilitySystemGlobals"
4.9.1 InitGlobalData()
从UE 4.24开始,就必须要调用UAbilitySystemGlobals::Get().InitGlobalData()
来使用TargetData
,否则你会有ScriptStructCache
相关的报错,并且客户端将从服务器断开。这个函数在项目中只需要调用一次。堡垒之夜是在UAssetManager::StartInitialLoading()
中进行调用的,Paragon则是在UEngine::Init()
。我发现将其放在UAssetManager::StartInitialLoading()
是比较合适的位置,可以参看示例项目。这是很好的样板代码,如果我是你我就乖乖得将其拷贝到自己得项目中,以防出现TargetData
相关的问题。
如果你在使用AbilitySystemGlobals
的GlobalAttributeSetDefaultsTableNames
时遇到崩溃,你可以需要延后对UAbilitySystemGlobals::Get().InitGlobalData()
的调用,就将堡垒之夜那样在AssetManager
或者在GameInstance
中。