分析 UAbilitySystemComponent 的所有成员变量和成员函数

按照功能模块进行分类分析。

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. 调试支持 - 完善的开发期调试工具

在网络游戏中,这个类负责确保所有游戏状态在客户端和服务器之间正确同步,同时提供良好的客户端预测体验以减少延迟感。每个成员函数都经过精心设计,以平衡性能、网络带宽和游戏体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值