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技能的释放。
网友评论