跳转至

冷却 / 消耗 / 堆叠示例

这三件事 UAK 一行代码都不做——它们全部是 GAS 的能力,UAK 只是不去挡路。 本文说明"该怎么配",以及为什么不该在 UAK 资产里配。

1. 为什么不放进 UAKAbilityAsset

资产的定位是一条时间轴,且它与 Ability 是 N:M 关系: 同一条资产可以被多个技能(不同冷却/消耗)引用。 如果把冷却写进资产,这个解耦就被破坏了。

2. 冷却(CooldownGameplayEffect)

在 UAKGameplayAbility 上:

字段 值
Cooldown Gameplay Effect 指向一个 GE_Cooldown_XXX

GE_Cooldown_XXX 的配置:

字段 值
Duration Policy Has Duration
Duration Magnitude 例如 5.0
Granted Tags Cooldown.Skill.XXX(供 UI 查询剩余时间)

查询剩余时间:

float TimeRemaining = 0.f, Duration = 0.f;
Ability->GetCooldownTimeRemainingAndDuration(Handle, ActorInfo, TimeRemaining, Duration);

3. 消耗(CostGameplayEffect)

字段 值
Cost Gameplay Effect 指向 GE_Cost_Mana_30

GE_Cost_Mana_30 的配置:

字段 值
Duration Policy Instant
Modifiers Attribute = Mana,Operation = Additive,Magnitude = -30

消耗不足时 GAS 会自动拒绝激活(CommitAbility 返回 false)。

4. 堆叠(Stacking)

Buff 类 GE 上配:

字段 值
Duration Policy Has Duration 或 Infinite
Stacking Type Aggregate by Source / Aggregate by Target
Stack Limit Count 例如 3
Stack Duration Refresh Policy Refresh on Successful Application
Stack Expiration Policy Clear Entire Stack 或 Remove Single Stack and Refresh Duration

5. 与 UAK 任务的配合

需求 做法
同一条时间轴、不同冷却 两个 UAKGameplayAbility 指向同一条资产
技能数值随等级变化 任务的 SetByCaller + 技能在计算 Spec 时写入
需要"引导中"这种状态 用 GE 授予 State.Channeling Tag,UAK 不额外提供状态
打断 用 CancelAbilitiesWithTag / BlockAbilitiesWithTag(资产上)或 GAS 的 CancelAbility

6. 校验

UAKValidateCommandlet 不会检查 GE 配置(那是 GAS 的事), 但你可以把"技能没配冷却 GE"这类项目规则写进自己的校验规则里(见 15-validation 的"规则集扩展")。