虚幻四Gameplay Ability System入门(4)-治疗效果

这次我们要实现的是一个治疗回血的技能,它的效果是使用治疗技能后角色的生命值会缓慢恢复。在这个效果上,我们希望实现通过Gameplay Cue实现角色使用恢复技能后身上会有一个特效,再第一次使用技能系统中的Tag标签。

首先还是从设计技能的流程开始。

  1. 使用技能需要消耗魔法值,但是我们之前创建的AttributeSet中只有生命值,所以首先需要添加一个Attribute Mana,并初始化。
  2. 添加恢复技能,技能会播放一个Montage,播放完毕后向自己申请一个Gameplay Effect。该GE的效果是在一定的时间内缓慢地增加生命值。
  3. 创建一个Gameplay Cue,它会在GE的持续时间中在角色身上播放特效。
  4. 创建一个碰撞体,它可以取消带有某一类Tag的GE,这样我们就可以取消角色身上的治疗效果。

法力值Attribute

打开Rider, 首先在AttributeSetBase.h添加Mana Attribute

UCLASS()
class GAS_LEARN_API UAttributeSetBase : public UAttributeSet
{
	// ......
	// Mana
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Attributes", ReplicatedUsing=OnRep_Mana)
	FGameplayAttributeData Mana;
	ATTRIBUTE_ACCESSORS(UAttributeSetBase, Mana);

	UFUNCTION()
	virtual void OnRep_Mana(const FGameplayAttributeData& OldMana);
};

然后在AttritubteSet.cpp中实现:

void UAttributeSetBase::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
	// ......
	DOREPLIFETIME_CONDITION_NOTIFY(UAttributeSetBase, Mana, COND_None, REPNOTIFY_Always);
}

void UAttributeSetBase::OnRep_Mana(const FGameplayAttributeData& OldMana)
{
	GAMEPLAYATTRIBUTE_REPNOTIFY(UAttributeSetBase, Mana, OldMana);
}

这里初始化的方法我还是使用了DataTable。在数据表中添加一行数据。
1.png

如果不想用这种方法,也可以直接在之前创建的GE_AttributeDefault中通过添加一个Modifier来初始化Mana。

Health Regen Ability

创建Gameplay Ability,命名为GA_HealthRegen。

大致的流程比较简单,首先通过Commit Ability来消耗法力值,然后运行Task PlayMontageAndWait,随后向Owner申请一个Gameplay Effect(这里有个问题,应该从On Compeleted链接Apply,然后从apply gameplay effect连接endability,结束能力)
虚幻四Gameplay Ability System入门(4)-治疗效果_第1张图片

这里消耗法力值同样是通过Gameplay Effect,创建GE_HealthRegen_Cost。这里的逻辑比较简单,通过Modifer的Magnitude直接Add(笑) -20的Mana。
虚幻四Gameplay Ability System入门(4)-治疗效果_第2张图片

想了想,觉得这个技能应该还需要一个冷却时间,感谢GAS系统,它已经帮我们造好了轮子,要实现技能冷却只需要一个GE即可。创建GE_HealthRegen_Cooldown。

这里的实现方法为修改Duration Policy为Has Duration,之前我们使用的一直是默认的instant,表示这个GE的效果和持续时间是瞬时的。然后设置Magnitude为5.0
虚幻四Gameplay Ability System入门(4)-治疗效果_第3张图片

最后还需要一个GE为HealthRegen的技能效果,它的持续时间同样应该为Has Duration。创建GE_HealthRegen_Effect。

我们设置恢复效果的持续时间为5秒,在下方的Period从0改为0.2,表明这个技能效果每0.2秒触发一次,最后添加一个modifier,设置每一次触发效果为增加生命值2.0
虚幻四Gameplay Ability System入门(4)-治疗效果_第4张图片

技能所需的所有GE都完成了,再次打开GA_HealthRegen,打开GA的Defualt Settings。将我们刚才实现的Cost和Cooldown效果添加进去。
虚幻四Gameplay Ability System入门(4)-治疗效果_第5张图片

别忘了把GE添加上去哦(笑)
虚幻四Gameplay Ability System入门(4)-治疗效果_第6张图片

Gameplay Cue

创建Gameplay Cue,命名为GC_HealthRegen_Effect。这里选错了,应该创建的是上面那个actor。
虚幻四Gameplay Ability System入门(4)-治疗效果_第7张图片

重写Event HandleGameplayCue,它可以通过Event Type,当效果刚刚启动后,就会在拥有者身上添加一个Emitter,因为我不是特效师,这里的特效就用UE4提供的燃烧特效吧,治疗效果的特效是燃烧,好像没有什么问题。

这里连线错误了,应该连在Target上。
虚幻四Gameplay Ability System入门(4)-治疗效果_第8张图片

在Default Setting中添加Gameplay Cue Tag中添加一个tag。
虚幻四Gameplay Ability System入门(4)-治疗效果_第9张图片

为了能够触发这个效果,我们还需要打开GE_HealthRegen_Effect,为这个效果添加一个Gameplay Cue,将它的tag设置为Ability.HealthRegen.Effect。同时将效果的AssetTag也设置为同样的Tag。
虚幻四Gameplay Ability System入门(4)-治疗效果_第10张图片

角色设置

BeginPlay中Give Ability

虚幻四Gameplay Ability System入门(4)-治疗效果_第11张图片

然后将Ability和输入绑定。,这里有一个测试GE,它的效果是让角色扣25血,之前重复类似的操作太多了,我就不具体展示了。

运行游戏,看看效果。

虚幻四Gameplay Ability System入门(4)-治疗效果_第12张图片

取消治疗效果

首先创建一个Actor,然后为它添加一个Box Collision。
虚幻四Gameplay Ability System入门(4)-治疗效果_第13张图片

通过Remove Active Effect With Tags,移除角色身上带有Ability.HealthRegen.Effect标签的效果。
虚幻四Gameplay Ability System入门(4)-治疗效果_第14张图片

运行游戏。

没有走入actor中,角色身上会燃烧。

虚幻四Gameplay Ability System入门(4)-治疗效果_第15张图片

走入actor后,燃烧效果被移除了。

虚幻四Gameplay Ability System入门(4)-治疗效果_第16张图片

你可能感兴趣的:(虚幻四,Gameplay,Ability,System,游戏开发,虚幻四,游戏,游戏开发)