mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-06-26 19:34:47 +00:00
68 lines
4.7 KiB
Markdown
68 lines
4.7 KiB
Markdown
|
# 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 sourceGameplayEffectSpec:Cue所属的GameplayEffect实例(如果是GE触发)
|
|||
|
- AbilitySpec sourceAbilitySpec:Cue所属的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: 提供以下选项
|
|||
|
- CueOnExecute(Instant):Cue都会在GameplayEffect执行时触发。
|
|||
|
- 持续执行的GameplayEffect: 提供以下选项
|
|||
|
- CueDurational(Durational):生命周期完全和GameplayEffect同步
|
|||
|
- CueOnAdd(Instant):GameplayEffect添加时触发
|
|||
|
- CueOnRemove(Instant):GameplayEffect移除时触发
|
|||
|
- CueOnActivate(Instant):GameplayEffect激活时触发。
|
|||
|
- CueOnDeactivate(Instant):GameplayEffect失活时触发。
|
|||
|
|
|||
|
### 在Ability中使用Cue
|
|||
|
AbilityAsset中提供了Instant和Durational两个选项的Cue参数。
|
|||
|
但是Cue的使用完全依赖于Ability自身的业务逻辑,因此程序开发者在AbilitySpec中实现Cue逻辑时一定要保证合理性。
|
|||
|
特别是对于Durational类型的Cue,一定要保证Cue生命周期的合理性,切记不要出现遗漏销毁Cue的情况。
|
|||
|
|