这一部分给GE剩下的部分收个尾,如果还想要进一步了解GE背后的各个原理,建议深入源码的海洋遨游(笑)。
Gameplay Effect
这一部分是GE的核心,之前的两篇文章主要讲的也是这一部分,GE实现的主要是如何对角色状态和属性进行修改。
Period
这一部分定义的是GE的触发周期,当GE的Duration Policy为Infinite或Duration后,可以在这里设置触发周期。如果设置以后,GE的应用状态类似于每Period触发一次的Instant
Application
这里的第一个属性,Chance to Apply to Target定义的是该GE向目标成功应用的概率。经过我的测试,这个属性只影响第一次申请的概率,如果GE是Duration或者Infinite的效果,成功应用后这个概率就不会再影响GE的效果。
我们也可以自己实现一个应用的要求。通过新建UGameplayEffectCustomApplicationRequirement的派生类,重写函数CanApplyGameplayEffect来实现。具体的实现我还没有测试过,有兴趣的可以自己去试试看。
/** Class used to perform custom gameplay effect modifier calculations, either via blueprint or native code */
UCLASS(BlueprintType, Blueprintable, Abstract)
class GAMEPLAYABILITIES_API UGameplayEffectCustomApplicationRequirement : public UObject
{
public:
GENERATED_UCLASS_BODY()
/** Return whether the gameplay effect should be applied or not */
UFUNCTION(BlueprintNativeEvent, Category="Calculation")
bool CanApplyGameplayEffect(const UGameplayEffect* GameplayEffect, const FGameplayEffectSpec& Spec, UAbilitySystemComponent* ASC) const;
};
Tags
这个部分是定义影响GE效果的标签设置。
GameplayEffectAssetTag
这里放的是GE本身拥有的标签,本身没有特别的功能,用来表明GE的身份。这里的标签是为GE自己所有,不会添加给角色的ASC。
GrantedTags
这里的标签会在GE的作用状态中,添加给Apply该GE的Actor的ASC,等于说角色会在GE的应用状态中获得这些标签。
Ongoing Tag Requirements
这个部分决定的是GE的开关状态,当GE成功应用后,还需要满足Ongoing Tag才能起作用。这个标签本身影响的只是GE是否起作用,但GE仍然是挂在角色的ASC上的,可以添加Tag让GE重新起作用。
Application Tag Requirements
这个标签决定的是GE是否能被应用,如果不满足Application Tag,GE就会直接失败。
Removal Tag Requirements
如果满足Removal Tag,GE就会直接从角色的ASC中被移除。这个标签同样可以起到Application Tag Requirements的作用。
剩下的两个部分我自己没有测试过。
Display
这里比较重要的是Gameplay Cue,我们可以通过设置这里的Gameplay Cue Tags,在GE应用的状态下触发具有和这里的标签相同的Gameplay cue。经过我的测试,当GE的时间状态为Infinite或Duration的时候,GC actor中可以通过On Executed每一次周期都触发一次GC
上图的Magnitude Attribute数据可以在gameplay cue中的Parameters中获取,我们可以用来设置诸如粒子特效的大小,类型之类的。如果没有设置,这里默认返回的是GE的level。
Immunity
这里设置的是GE应用状态时的免疫效果,当GE处于执行状态时,其它带有相同标签的GE将无法应用于角色。比如角色处于火焰免疫状态的时候,它可以避免所有带有Fire标签的GE。
Stacking
默认状态下,每一次GE被应用时,都会生成一个该GE的实例添加到角色的ASC上。但是我们可以通过设置Stack Limit Count来限制GE实例的数量。它有两种类型,一种是根据Source ASC的数量判断,一种是根据Target ASC拥有的GE数量判断。
Granted Abilities
通过Granted Abilities可以在GE持续时间的状态中给予角色某种Ability。
到这里为止,我对GE的介绍和应用就算介绍完成了。
下一期我计划实现一个地爆天星神罗天征的效果哈哈。