1 static UAbilitySystemGlobals& Get()
保证了是单例,IGameplayAbilitiesModule继承了IModuleInterface
/** Gets the single instance of the globals object, will create it as necessary */
static UAbilitySystemGlobals& Get()
{
return *IGameplayAbilitiesModule::Get().GetAbilitySystemGlobals();
}
2 InitGlobalData相关
2.1 InitGlobalData
确保不会再次初始化
获取一些列初值
绑定到指定回调
void UAbilitySystemGlobals::InitGlobalData()
{
// Make sure the user didn't try to initialize the system again (we call InitGlobalData automatically in UE5.3+).
if (IsAbilitySystemGlobalsInitialized())
{
return;
}
bInitialized = true;
LLM_SCOPE(TEXT("AbilitySystem"));
GetGlobalCurveTable();
GetGlobalAttributeMetaDataTable();
InitAttributeDefaults();
ReloadAttributeDefaults();
GetGameplayCueManager();
GetGameplayTagResponseTable();
InitGlobalTags();
PerformDeveloperSettingsUpgrade();
InitTargetDataScriptStructCache();
// Register for PreloadMap so cleanup can occur on map transitions
FCoreUObjectDelegates::PreLoadMapWithContext.AddUObject(this, &UAbilitySystemGlobals::HandlePreLoadMap);
#if WITH_EDITOR
// Register in editor for PreBeginPlay so cleanup can occur when we start a PIE session
if (GIsEditor)
{
FEditorDelegates::PreBeginPIE.AddUObject(this, &UAbilitySystemGlobals::OnPreBeginPIE);
}
#endif
}
2.2 IsAbilitySystemGlobalsInitialized
朴实无华返回bInitialized
bool UAbilitySystemGlobals::IsAbilitySystemGlobalsInitialized() const
{
return bInitialized;
}
2.3 GetGlobalCurveTable和GetGlobalAttributeMetaDataTable
从UGameplayAbilitiesDeveloperSettings中获取GlobalCurveTableName然后TryLoad
UCurveTable * UAbilitySystemGlobals::GetGlobalCurveTable()
{
if (!GlobalCurveTable)
{
const UGameplayAbilitiesDeveloperSettings* DeveloperSettings = GetDefault<UGameplayAbilitiesDeveloperSettings>();
if (DeveloperSettings->GlobalCurveTableName.IsValid())
{
GlobalCurveTable = Cast<UCurveTable>(DeveloperSettings->GlobalCurveTableName.TryLoad());
}
}
return GlobalCurveTable;
}
GetGlobalAttributeMetaDataTable同理
UDataTable * UAbilitySyst

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



