1. AttributeSet基础概念与创建
在UE5的GameplayAbilitySystem(GAS)框架中,AttributeSet(属性集)是管理游戏角色属性的核心组件。简单来说,它就像是一个专门存放角色各种数值的"保险箱",比如生命值、法力值、攻击力等。这个保险箱的特殊之处在于,它能自动处理数值同步和动态调整的逻辑。
每个Attribute(属性)都包含两个关键数值:
- Base Value:基础值,通常由GameplayEffect(GE)的Instant类型直接修改
- Current Value:当前值,会受到持续效果(Infinite或Has Duration类型的GE)影响
举个例子,当角色受到瞬时伤害时,Base Value会被直接修改;而中毒这种持续掉血效果,则会影响Current Value。当持续效果结束时,Current Value会自动恢复到Base Value对应的状态。
创建AttributeSet需要在C++中完成,下面是一个典型的生命值属性定义:
cpp复制UPROPERTY(BlueprintReadOnly, Category = "Attributes")
FGameplayAttributeData Health;
UPROPERTY(BlueprintReadOnly, Category = "Attributes")
FGameplayAttributeData MaxHealth;
// 属性注册
void USurvivalAttributeSet::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME_CONDITION_NOTIFY(USurvivalAttributeSet, Health, COND_None, REPNOTIFY_Always);
DOREPLIFETIME_CONDITION_NOTIFY(USurvivalAttributeSet, MaxHealth, COND_None, REPNOTIFY_Always);
}
在实际项目中,我建议将相关属性分组管理。比如战斗相关的属性(生命、攻击、防御)放在CombatAttributeSet中,移动相关的属性(速度、跳跃力)放在MovementAttributeSet中。这样既方便维护,也符合组件化设计思想。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 属性初始化三大方案
刚创建好的AttributeSet就像一张白纸,我们需要给各个属性赋初始值。根据
