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

4.7 KiB
Raw Permalink Blame History

EX-GAS Wiki -- GameplayCue

目前EX-GAS的GameplayCue功能还未完善。功能相对简陋。

GameplayCue的作用

GameplayCue是一个用于播放游戏提示的类它的作用是在游戏运行时播放游戏效果比如播放一个特效、播放一个音效等。

GameplayCue的原则

Cue是游戏提示他必须遵守以下原则

  • Cue不应该对游戏的数值体系产生影响比如不应该对游戏的属性进行修改不应该对游戏的Buff进行修改等。
  • Cue不应该对游戏玩法产生实际影响比如即时战斗类的游戏Cue不应该影响角色的位移、攻击等。

第一条原则是所有类型游戏必须遵守的。

而第二条原则就见仁见智了因为游戏类型和玩法决定了cue的影响范围。 比如即时战斗类游戏cue对角色位移有操作显然就是干涉了战斗但如果是回合制游戏cue对角色位移的操作就可以被当成是动画表现。 甚至即便是即时战斗类游戏cue对角色位移的操作也可以被当成是动画表现只要游戏开发人员认为cue的位移操作不影响游戏的战斗结果即可。

GameplayCue的类型

GameplayCue的类型分两大类

  • GameplayCueInstant瞬时性的Cue比如播放动画伤害UI提示等
  • GameplayCueDurational持续性的Cue比如持续性的特效、持续性的音效等

GameplayCueInstant和GameplayCueDurational都是抽象类它们的子类才是真正的可使用Cue类。 Cue是需要程序开发人员大量实现的毕竟游戏不同导致游戏提示千变万化。

关于Cue的子类实现

Cue的完整组成为GameplayCue和GameplayCueSpec

  • GameplayCue< T >(抽象基类,T为对应的Spec类Cue的数据实类是一个可编辑类开发人员可以在编辑器中设置Cue的各种参数。该类只可以被视作数据类。
    • 必须实现CreateSpec方法用于创建对应的Spec类
  • GameplayCueSpec抽象基类Cue的规格类是Runtime下Cue的真正实例Cue的具体逻辑在该类中实现。
    • GameplayCueInstantSpec瞬时性Cue的规格类
      • Trigger(): 必须实现的方法用于触发Cue
    • GameplayCueDurationalSpec持续性Cue的规格类
      • OnAdd(): 必须实现的方法用于Cue被添加时的逻辑
      • OnRemove(): 必须实现的方法用于Cue被移除时的逻辑
      • OnGameplayEffectActivated(): 必须实现的方法用于Cue所属的GameplayEffect被激活时的逻辑
      • OnGameplayEffectDeactivated(): 必须实现的方法用于Cue所属的GameplayEffect被移除时的逻辑
      • OnTick(): 必须实现的方法用于Cue的每帧更新逻辑

关于Cue的参数传递

目前EX-GAS的Cue参数传递非常简陋依赖于结构体GameplayCueParameters成员如下

  • GameplayEffectSpec sourceGameplayEffectSpecCue所属的GameplayEffect实例如果是GE触发
  • AbilitySpec sourceAbilitySpecCue所属的Ability实例如果是Ability触发
  • object[] customArguments自定义参数不同于GameplayCue中的数据。 customArguments是供程序开发人员在业务逻辑内自由传递参数的载体。

注意customArguments是一个object数组开发人员需要自己保证传递的参数类型正确否则会导致运行时错误。 customArguments是最暴力的设计往后EX-GAS的Cue参数传递设计还会进行优化。

GameplayCue的使用

GameplayCue的使用手段很多最基础的是在GameplayEffect中使用Cue最开始的设计基础也是依附于GameplayEffect。Ability也可以对Cue进行操作。

除此之外Cue的使用不限制于EX-GAS的体系内。开发者可以在任何地方使用Cue只要能获取到GameplayCue的资源实例并且遵守Cue的原则即可。

在GameplayEffect中使用Cue

GameplayEffect中使用Cue会根据GameplayEffect执行策略产生变化。

  • 即时执行的GameplayEffect: 提供以下选项
    • CueOnExecuteInstantCue都会在GameplayEffect执行时触发。
  • 持续执行的GameplayEffect: 提供以下选项
    • CueDurationalDurational生命周期完全和GameplayEffect同步
    • CueOnAddInstantGameplayEffect添加时触发
    • CueOnRemoveInstantGameplayEffect移除时触发
    • CueOnActivateInstantGameplayEffect激活时触发。
    • CueOnDeactivateInstantGameplayEffect失活时触发。

在Ability中使用Cue

AbilityAsset中提供了Instant和Durational两个选项的Cue参数。 但是Cue的使用完全依赖于Ability自身的业务逻辑因此程序开发者在AbilitySpec中实现Cue逻辑时一定要保证合理性。 特别是对于Durational类型的Cue一定要保证Cue生命周期的合理性切记不要出现遗漏销毁Cue的情况。