按照功能模塊進行分類分析。

1. 核心系統定義和配置

成員變量

ReplicationMode

EGameplayEffectReplicationMode ReplicationMode;
  • 意義: 控制 GameplayEffect 的複製模式
  • 項目用途: 優化網絡帶寬,根據客户端類型決定複製數據的詳細程度
  • 網絡遊戲用途:
  • Minimal: 只複製最小信息,不適用於擁有的 ASC
  • Mixed: 向模擬代理複製最小信息,向所有者和自主代理複製完整信息
  • Full: 向所有客户端複製完整信息

ScopedPredictionKey

FPredictionKey ScopedPredictionKey;
  • 意義: 當前預測鍵,用於客户端預測
  • 項目用途: 管理客户端預測的上下文
  • 網絡遊戲用途: 防止預測衝突,支持預測回滾

AffectedAnimInstanceTag

FName AffectedAnimInstanceTag;
  • 意義: 指定播放蒙太格的動畫實例標籤
  • 項目用途: 支持多個動畫實例的場景
  • 網絡遊戲用途: 確保動畫在網絡同步時播放到正確的動畫實例

2. 屬性系統 (Attributes)

成員函數

GetSet / GetSetChecked / AddSet 模板函數

template <class T>
const T* GetSet() const;
  • 意義: 獲取指定類型的屬性集
  • 項目用途: 類型安全的屬性集訪問
  • 網絡遊戲用途: 確保屬性訪問的類型安全,支持網絡同步的屬性操作

HasAttributeSetForAttribute

bool HasAttributeSetForAttribute(FGameplayAttribute Attribute) const;
  • 意義: 檢查是否包含指定屬性的屬性集
  • 項目用途: 驗證屬性有效性
  • 網絡遊戲用途: 防止在無效屬性上操作導致網絡錯誤

InitStats / K2_InitStats

const UAttributeSet* InitStats(TSubclassOf<class UAttributeSet> Attributes, const UDataTable* DataTable);
  • 意義: 從數據表初始化屬性
  • 項目用途: 批量初始化角色屬性
  • 網絡遊戲用途: 服務器端初始化,確保所有客户端屬性一致

SetNumericAttributeBase / GetNumericAttributeBase

void SetNumericAttributeBase(const FGameplayAttribute &Attribute, float NewBaseValue);
float GetNumericAttributeBase(const FGameplayAttribute &Attribute) const;
  • 意義: 設置/獲取屬性的基礎值(不考慮臨時修飾器)
  • 項目用途: 永久性屬性修改
  • 網絡遊戲用途: 服務器權威操作,客户端只能讀取

ApplyModToAttribute / ApplyModToAttributeUnsafe

void ApplyModToAttribute(const FGameplayAttribute &Attribute, TEnumAsByte<EGameplayModOp::Type> ModifierOp, float ModifierMagnitude);
  • 意義: 直接應用修飾器到屬性
  • 項目用途: 高性能的屬性修改
  • 網絡遊戲用途: ApplyModToAttribute 只在服務器運行,ApplyModToAttributeUnsafe 可在客户端運行但可能導致預測問題

3. GameplayEffects 系統

成員函數

ApplyGameplayEffectSpecToTarget / ApplyGameplayEffectSpecToSelf

FActiveGameplayEffectHandle ApplyGameplayEffectSpecToTarget(const FGameplayEffectSpec& GameplayEffect, UAbilitySystemComponent *Target, FPredictionKey PredictionKey=FPredictionKey());
  • 意義: 應用 GameplayEffect 到目標或自身
  • 項目用途: 核心的效果應用接口
  • 網絡遊戲用途: 支持預測鍵,客户端可以預測效果應用

MakeOutgoingSpec

FGameplayEffectSpecHandle MakeOutgoingSpec(TSubclassOf<UGameplayEffect> GameplayEffectClass, float Level, FGameplayEffectContextHandle Context) const;
  • 意義: 創建出站的 GameplayEffect 規格
  • 項目用途: 準備要應用的 GameplayEffect
  • 網絡遊戲用途: 在客户端創建預測用的效果規格

GetGameplayEffectCount

int32 GetGameplayEffectCount(TSubclassOf<UGameplayEffect> SourceGameplayEffect, UAbilitySystemComponent* OptionalInstigatorFilterComponent, bool bEnforceOnGoingCheck = true) const;
  • 意義: 獲取指定類型 GameplayEffect 的數量
  • 項目用途: 效果堆疊和狀態檢查
  • 網絡遊戲用途: 客户端可以查詢本地預測的效果數量

RemoveActiveGameplayEffect

bool RemoveActiveGameplayEffect(FActiveGameplayEffectHandle Handle, int32 StacksToRemove=-1);
  • 意義: 移除活動的 GameplayEffect
  • 項目用途: 效果管理和清理
  • 網絡遊戲用途: 服務器權威操作,客户端通過 RPC 請求移除

4. GameplayTags 系統

成員函數

HasMatchingGameplayTag / HasAllMatchingGameplayTags / HasAnyMatchingGameplayTags

bool HasMatchingGameplayTag(FGameplayTag TagToCheck) const;
bool HasAllMatchingGameplayTags(const FGameplayTagContainer& TagContainer) const;
bool HasAnyMatchingGameplayTags(const FGameplayTagContainer& TagContainer) const;
  • 意義: 檢查 GameplayTag 的存在性
  • 項目用途: 遊戲邏輯條件判斷
  • 網絡遊戲用途: 客户端可以查詢本地預測的標籤狀態

GetGameplayTagCount

int32 GetGameplayTagCount(FGameplayTag GameplayTag) const;
  • 意義: 獲取 GameplayTag 的計數
  • 項目用途: 堆疊標籤管理
  • 網絡遊戲用途: 支持網絡複製的標籤計數

AddLooseGameplayTag / RemoveLooseGameplayTag

void AddLooseGameplayTag(const FGameplayTag& GameplayTag, int32 Count=1);
void RemoveLooseGameplayTag(const FGameplayTag& GameplayTag, int32 Count=1);
  • 意義: 添加/移除鬆散 GameplayTag(不復制)
  • 項目用途: 本地臨時狀態標記
  • 網絡遊戲用途: 僅本地有效,不參與網絡同步

5. GameplayCues 系統

成員函數

ExecuteGameplayCue

void ExecuteGameplayCue(const FGameplayTag GameplayCueTag, FGameplayEffectContextHandle EffectContext = FGameplayEffectContextHandle());
  • 意義: 執行 GameplayCue(瞬時效果)
  • 項目用途: 播放視覺、音頻效果
  • 網絡遊戲用途: 通過網絡 RPC 同步視覺效果

AddGameplayCue / RemoveGameplayCue

void AddGameplayCue(const FGameplayTag GameplayCueTag, FGameplayEffectContextHandle EffectContext = FGameplayEffectContextHandle());
void RemoveGameplayCue(const FGameplayTag GameplayCueTag);
  • 意義: 添加/移除持久 GameplayCue
  • 項目用途: 持續視覺效果管理
  • 網絡遊戲用途: 通過網絡同步持久視覺效果狀態

NetMulticast_InvokeGameplayCueExecuted_FromSpec 等 RPC 函數

void NetMulticast_InvokeGameplayCueExecuted_FromSpec(const FGameplayEffectSpecForRPC Spec, FPredictionKey PredictionKey);
  • 意義: 多播 RPC 調用 GameplayCue
  • 項目用途: 網絡同步視覺效果
  • 網絡遊戲用途: 服務器向所有相關客户端廣播視覺效果

6. GameplayAbilities 系統

成員變量

ActivatableAbilities

FGameplayAbilitySpecContainer ActivatableAbilities;
  • 意義: 可激活的技能容器
  • 項目用途: 管理角色所有可用技能
  • 網絡遊戲用途: 網絡複製技能狀態

PendingServerActivatedAbilities

TArray<FPendingAbilityInfo> PendingServerActivatedAbilities;
  • 意義: 等待服務器激活的技能列表
  • 項目用途: 處理客户端預測和服務器確認
  • 網絡遊戲用途: 解決網絡延遲導致的技能激活時序問題

成員函數

GiveAbility / K2_GiveAbility

FGameplayAbilitySpecHandle GiveAbility(const FGameplayAbilitySpec& AbilitySpec);
FGameplayAbilitySpecHandle K2_GiveAbility(TSubclassOf<UGameplayAbility> AbilityClass, int32 Level = 0, int32 InputID = -1);
  • 意義: 授予角色新技能
  • 項目用途: 技能學習和裝備系統
  • 網絡遊戲用途: 服務器權威操作,通過網絡複製到客户端

TryActivateAbility

bool TryActivateAbility(FGameplayAbilitySpecHandle AbilityToActivate, bool bAllowRemoteActivation = true);
  • 意義: 嘗試激活技能
  • 項目用途: 技能觸發入口
  • 網絡遊戲用途: 支持客户端預測激活,最終由服務器確認

CancelAbility / CancelAllAbilities

void CancelAbility(UGameplayAbility* Ability);
void CancelAllAbilities(UGameplayAbility* Ignore=nullptr);
  • 意義: 取消技能
  • 項目用途: 技能中斷和狀態清理
  • 網絡遊戲用途: 網絡同步技能取消狀態

7. 輸入和定位系統

成員函數

BindAbilityActivationToInputComponent

void BindAbilityActivationToInputComponent(UInputComponent* InputComponent, FGameplayAbilityInputBinds BindInfo);
  • 意義: 綁定技能激活到輸入組件
  • 項目用途: 連接輸入系統和技能系統
  • 網絡遊戲用途: 只在本地玩家控制器上設置輸入綁定

AbilityLocalInputPressed / AbilityLocalInputReleased

void AbilityLocalInputPressed(int32 InputID);
void AbilityLocalInputReleased(int32 InputID);
  • 意義: 本地輸入按下/釋放處理
  • 項目用途: 輸入事件到技能激活的轉換
  • 網絡遊戲用途: 自主代理處理本地輸入,服務器通過 RPC 接收輸入狀態

8. 動畫和蒙太格系統

成員函數

PlayMontage

float PlayMontage(UGameplayAbility* AnimatingAbility, FGameplayAbilityActivationInfo ActivationInfo, UAnimMontage* Montage, float InPlayRate, FName StartSectionName = NAME_None, float StartTimeSeconds = 0.0f);
  • 意義: 播放技能蒙太格
  • 項目用途: 技能動畫播放
  • 網絡遊戲用途: 通過網絡同步蒙太格播放狀態

CurrentMontageStop / CurrentMontageJumpToSection

void CurrentMontageStop(float OverrideBlendOutTime = -1.0f);
void CurrentMontageJumpToSection(FName SectionName);
  • 意義: 控制當前蒙太格
  • 項目用途: 動畫流程控制
  • 網絡遊戲用途: 通過網絡 RPC 同步蒙太格控制命令

9. 網絡複製和 RPC 系統

成員函數

ServerTryActivateAbility

UFUNCTION(Server, reliable, WithValidation)
void ServerTryActivateAbility(FGameplayAbilitySpecHandle AbilityToActivate, bool InputPressed, FPredictionKey PredictionKey);
  • 意義: 服務器 RPC 嘗試激活技能
  • 項目用途: 客户端向服務器請求技能激活
  • 網絡遊戲用途: 技能激活的服務器權威驗證

ServerSetReplicatedTargetData

UFUNCTION(Server, reliable, WithValidation)
void ServerSetReplicatedTargetData(FGameplayAbilitySpecHandle AbilityHandle, FPredictionKey AbilityOriginalPredictionKey, const FGameplayAbilityTargetDataHandle& ReplicatedTargetDataHandle, FGameplayTag ApplicationTag, FPredictionKey CurrentPredictionKey);
  • 意義: 服務器 RPC 設置複製目標數據
  • 項目用途: 同步技能目標選擇數據
  • 網絡遊戲用途: 客户端向服務器發送目標數據用於服務器驗證

ForceReplication

void ForceReplication();
  • 意義: 強制立即複製
  • 項目用途: 重要狀態變化的及時同步
  • 網絡遊戲用途: 確保關鍵狀態變化儘快同步到客户端

10. 調試和開發工具

成員函數

PrintDebug

void PrintDebug();
  • 意義: 打印調試信息
  • 項目用途: 開發期狀態查看
  • 網絡遊戲用途: 收集和顯示客户端-服務器狀態對比

ServerPrintDebug_Request

UFUNCTION(Server, reliable, WithValidation)
void ServerPrintDebug_Request();
  • 意義: 請求服務器調試信息
  • 項目用途: 遠程調試支持
  • 網絡遊戲用途: 客户端可以獲取服務器端的狀態信息用於調試

11. 內部狀態管理

成員變量

AbilityActorInfo

TSharedPtr<FGameplayAbilityActorInfo> AbilityActorInfo;
  • 意義: 能力執行者信息
  • 項目用途: 存儲技能執行所需的角色信息
  • 網絡遊戲用途: 確保客户端和服務器使用相同的角色引用

ActiveGameplayEffects

FActiveGameplayEffectsContainer ActiveGameplayEffects;
  • 意義: 活躍 GameplayEffects 容器
  • 項目用途: 管理所有當前生效的效果
  • 網絡遊戲用途: 網絡複製效果狀態,支持預測

ActiveGameplayCues

FActiveGameplayCueContainer ActiveGameplayCues;
  • 意義: 活躍 GameplayCues 容器
  • 項目用途: 管理所有當前生效的視覺提示
  • 網絡遊戲用途: 網絡同步視覺提示狀態

總結

UAbilitySystemComponent 是一個極其複雜的系統,它提供了:

  1. 完整的屬性系統 - 支持基礎值、修飾器、網絡同步
  2. 強大的效果系統 - 即時、持續、週期性的遊戲效果
  3. 靈活的標籤系統 - 遊戲狀態標記和查詢
  4. 可預測的技能系統 - 客户端預測、服務器驗證
  5. 網絡同步架構 - 支持各種複製模式和預測
  6. 視覺反饋系統 - GameplayCues 的同步播放
  7. 調試支持 - 完善的開發期調試工具

在網絡遊戲中,這個類負責確保所有遊戲狀態在客户端和服務器之間正確同步,同時提供良好的客户端預測體驗以減少延遲感。每個成員函數都經過精心設計,以平衡性能、網絡帶寬和遊戲體驗。