GAS - Gameplay Effect


Overview(概览)

Gameplay Effects are the Gameplay Ability System's way to change Attributes.
Gameplay Effects是GAS中改变Gameplay Attribute值的方式。包括:

  • 直接改变Attribute的base value,比如扣除Actor的生命值
  • 暂时改变(Buff or Debuff),比如几秒内增加移动速度
  • 一段时间内的持续改变,如每固定数秒(或随机)回复魔法值。

Gameplay Effect是纯数据(data-only)的(继承自UGameplayEffect),可以高效地replicate,与ability不同,通常我们不会拓展gameplay effect类,因为引擎提供的基本够用了。在代码中,你几乎不会看到gameplay effect的引用,蓝图中则更不可能见到。为了使用GameplayEffect你更常见的GameplayEffectSpec,它包含了使用Effect的上下文信息。通常使用gameplay effect有两种方式:一是直接通过ability应用,二是通过GameplayEffectSpec实例。

Major Properties(主要属性)

我们通过配置gameplay effect的各个属性值来实现特定的效果。以下是一些重要的属性:

  • Duration Policy(持续方式): 三种:Instant(瞬间施放,如受到攻击,减少血量)、Infinite(永久的,如随着时间自动回蓝)、HasDuration(有时限的,如暂时性buff)。
    Duration Policy
  • Modifiers(修改符): 配置effect如何修改attribute值。可以修改多个值,配置各种不同的修改符,也可以通过Curve Table来改值。

    Modifiers

  • Executions(修改符): 如果modifier中提供的操作无法满足需求,则自定义UGameplayEffectExecutionCalculation来实现需求,如复杂的计算等行为。

  • Application Requirement(施放条件): 默认提供了application tag requirement和施放概率。可以自己拓展UGameplayEffectCustomApplicationRequirement

  • Granted Abilities(获得技能): Gameplay effect除了可以给actor添加gameplay tag外,还可以使其获得额外ability。比如被火球魔法击中后,你会获得“着火”的能力,该能力会持续伤害到周边的Actor。

  • Stacking & Overflow(叠加和溢出): 技能效果可以叠加,也可能会溢出,可以通过配置进行管理。

  • Gameplay Cue Display(Gameplay Cue展示): gameplay cue具有很高的网络性能,用以播放装饰性效果,如粒子、声音特效。

例子: Gameplay Effect - Cooldown

Ability-SayHello

上图是一个简单的say hello的能力,红箭头处可以添加一个gameplay effect。当该能力执行结束了,会自动应用蓝圈处配置的cooldown gameplay effect,在该effect结束前,不能再使用该能力。


Gameplay effect - cooldown

上图红圈部分设置了该冷却效果的时间(时长为5s,Period中的配置不会影响效果,是否会带来优化则不明),蓝圈中则是该效果的核心部分,在效果持续期间,actor会获得一个标签,这个标签可以阻止之前say hello技能的释放。

你可能感兴趣的:(GAS - Gameplay Effect)