JisolGame/JEX_GAS/Assets/GAS/Wiki/GameplayEffect.md
2024-10-18 03:16:09 +08:00

6.3 KiB
Raw Blame History

EX-GAS Wiki -- GameplayEffect

GameplayEffect的作用

GameplayEffect是EX-GAS的核心之一一切的游戏数值体系交互基于GameplayEffect。

GameplayEffect掌握了游戏内元素的属性控制权。理论上只有它可以对游戏内元素的属性进行修改 (这里指的是修改,数值的初始化不算是修改)。当然,实际情况下,游戏开发人员当然可以手动直接修改属性值。 但是还是希望游戏开发者尽可能的不要打破EX-GAS的数值体系逻辑因为过多的额外操作可能会导致游戏的数值体系变得混乱难以追踪数值变化等等。

另外GameplayEffect还可以触发Cue游戏提示完成游戏效果的表现以及控制获取额外的能力等。


由于GameplayEffect是被封装好的程序开发者不会接触它的实现逻辑所以本文Wiki将跳过对其接口以及代码逻辑的解析。 后续,可能会完善代码接口的介绍。

GameplayEffect的使用

gameplayeffect_editor_durational.png

GameplayEffect的配置界面如图接下来逐一解释各个参数的含义。

  • NameGameplayEffect的名称纯粹用于显示不会影响游戏逻辑。方便编辑者区分GameplayEffect。
  • DescriptionGameplayEffect的描述纯粹用于显示不会影响游戏逻辑。方便编辑者阅读理解GameplayEffect。
  • DurationPolicyGameplayEffect的执行策略有以下几种
    • Instant即时执行GameplayEffect被添加时立即执行执行完毕后销毁自身。
    • Duration持续执行GameplayEffect被添加时立即执行持续时间结束后移除自身。
    • Infinite无限执行GameplayEffect被添加时立即执行执行完毕后不会移除需要手动移除。
    • None无效果,这是默认占位符因为GameplayEffect是结构体None方便视作GameplayEffect的空值。 GameplayEffect配置的执行策略禁止使用None
  • Duration持续时间只有DurationPolicy为Duration时有效。
  • Every(Period)周期只有DurationPolicy为Duration或者Infinite时有效。每隔Period时间执行一次PeriodExecution。
  • PeriodExecution周期执行的GameplayEffect只有DurationPolicy为Duration或者Infinite且Period>0时有效。每隔Period时间执行一次PeriodExecution。 _PeriodExecution禁止为空!!_PeriodExecution原则上只允许是Instant类型的GameplayEffect。但如果根据开发者需求也可以使用其他类型的GameplayEffect。
  • GrantedAbilities授予的能力只有DurationPolicy为Duration或者Infinite时有效。在GameplayEffect生命周期内GameplayEffect的持有者会被授予这些能力。 GameplayEffect被移除时这些能力也会被移除。
  • Modifiers: 属性修改器。GameplayEffect的核心功能用于修改GameplayEffect持有者的属性。
    • Attribute属性名称需要填写属性的全名比如战斗属性集里的生命值AS_Fight.Health
    • ModifierMagnitude基础模值这个模值是否使用依赖于MMC的类型。在中有Wiki-MMC详细介绍。
    • Operation属性修改操作有加法、乘法、赋值覆写等。
    • MMC属性修改计算类用于计算ModifierMagnitude的值。 EX-GAS提供了多种ModifierCalculation开发者也可以自定义ModifierCalculation。 ModifierCalculation的类型在Wiki-MMC详细介绍。
  • Tags标签。Tag具有非常重要的作用合适的tag可以处理GameplayEffect之间复杂的关系。
    • AssetTags描述性质的标签用来描述GameplayEffect的特性表现比如伤害、治疗、控制等。
    • GrantedTagsGameplayEffect的持有者会获得这些标签GameplayEffect被移除时这些标签也会被移除。 Instant类型的GameplayEffect的GrantedTags是无效的。
    • ApplicationRequiredTagsGameplayEffect的目标单位必须拥有 【所有】 这些标签否则GameplayEffect无法被施加到目标身上。
    • OngoingRequiredTagsGameplayEffect的目标单位必须拥有 【所有】 这些标签否则GameplayEffect不会被激活施加和激活是两个概念 如果已经被施加的GameplayEffect持续过程中目标的tag变化了不满足效果就会失活满足了就会被激活。 Instant类型的GameplayEffect的OngoingRequiredTags是无效的。
    • RemoveGameplayEffectsWithTagsGameplayEffect的目标单位当前持有的所有GameplayEffect中拥有 【任意】 这些标签的GameplayEffect会被移除。
  • CuesGameplayEffect的提示。GameplayEffect可以触发Cue游戏提示完成游戏效果的表现以及控制获取额外的能力等。
    • DurationPolicy为Instant时
      • CueOnExecuteInstantGameplayEffect执行时触发。
    • DurationPolicy为Duration或者Infinite时
      • CueDurationalDurational生命周期完全和GameplayEffect同步
      • CueOnAddInstantGameplayEffect添加时触发
      • CueOnRemoveInstantGameplayEffect移除时触发
      • CueOnActivateInstantGameplayEffect激活时触发。
      • CueOnDeactivateInstantGameplayEffect失活时触发。

GameplayEffect的施加Apply和激活Activate

GameplayEffect的施加Apply和激活Activate是两个概念施加是指GameplayEffect被添加到目标身上激活是指GameplayEffect实际生效。

为什么做区分?

举个例子固有被动技能Ability是持续回血被动技能的逻辑显然是永久激活的状态而持续回血的效果GameplayEffect 来源于被动技能那如果单位受到了外部的debuff禁止所有的回血效果那么是不是被动技能被禁止显然不是被动技能还是会持续激活的。 那应该是移除回血效果吗显然也不是被动技能整个过程是不做任何变化如果移除回血效果那debuff一旦消失谁再把回血效果加回来 所以这里需要区分施加和激活被动技能的持续回血效果被施加到单位身上而debuff做的是让回血效果失活而不是移除回血效果一旦debuff结束 回血效果又被激活而这个激活的操作可以理解为回血效果自己激活的依赖于Tag系统