UE4 技能系统(GAS插件的使用) 04--Health Regen Ability生命回复技

翻译自Udemy的视频课程introduction-to-unreal-engine-4-ability-system 

Health Regen Ability生命回复技

1、设置UI显示自身的生命值

说明下本节要达到的效果:玩家有自身的UI,用于显示自身的生命值变化 (UI的设计非关注重点)

 2、设置Mana(魔法值)和Strength(力量值)

在BaseAttributeSet里与添加Health的方式一致

3、创建HealRegen(生命回复)这个GamePlayAbility,

添加GE_HealthRegen_CoolDown(添加冷却信息,同MeleeAttack),GE_HealthRegen_Cost(添加消耗信息),GE_HealthRegen_Reply(添加生命回复信息)

4、添加HealthFull这个Tag来中断HealthRegen这个技能的执行,需要在C++中进行

01、BaseCharacter中添加

    UFUNCTION(BlueprintCallable, Category = BaseChracter)
        void AddGameplyTag(FGameplayTag TagToAdd);
    UFUNCTION(BlueprintCallable, Category = BaseChracter)
        void RemoveGameplyTag(FGameplayTag TagToRemove);
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = BaseCharacter)
        FGameplayTag FullHealthTag;

// Called when the game starts or when spawned
void ABaseCharacter::BeginPlay()
{
    Super::BeginPlay();
    //在BeginPlay中动态的绑定委托
    AttributeSetComp->OnHealthChange.AddDynamic(this, &ABaseCharacter::OnHealthChange);
    AttributeSetComp->OnManaChange.AddDynamic(this, &ABaseCharacter::OnManaChange);
    AttributeSetComp->OnStrengthChange.AddDynamic(this, &ABaseCharacter::OnStrengthChange);
    AutoDetermineTeamIDByControllerType();
    //一开始添加FullHealthTag
    AddGameplyTag(FullHealthTag);
}

void ABaseCharacter::AddGameplyTag(FGameplayTag TagToAdd)
{
    GetAbilitySystemComponent()->AddLooseGameplayTag(TagToAdd);
    //必须指定要添加的Tag数量
    GetAbilitySystemComponent()->SetTagMapCount(TagToAdd, 1);
}

void ABaseCharacter::RemoveGameplyTag(FGameplayTag TagToRemove)
{
    GetAbilitySystemComponent()->RemoveLooseGameplayTag(TagToRemove);
}

02、在BaseAttribute的PostGameplayEffectExecute中对应生命值发生修改的地方添加如下代码,主要是进行判断当前生命值修改后是FullHealth?添加Tag:移除Tag

        OnHealthChange.Broadcast(Health.GetCurrentValue(), MaxHealth.GetCurrentValue());
        ABaseCharacter* CharacterOwner = Cast<ABaseCharacter>(GetOwningActor());
        if (Health.GetCurrentValue() == MaxHealth.GetCurrentValue())
        {
            if (CharacterOwner) {
                CharacterOwner->AddGameplyTag(CharacterOwner->FullHealthTag);
            }
        }
        else {
            if (CharacterOwner) {
                CharacterOwner->RemoveGameplyTag(CharacterOwner->FullHealthTag);
            }
        }

03、 编译,并指定FullHealthTag

04、指定GA_HealthRegen中的BlockAction标签对应值 

5、使用GameplayCue(GameplayCue用于特效与声音的播放)

01、创建蓝图GameplayCue_Static,命名为GAC_HealthRegen,里面的逻辑就是当Cue被调用的时候,产生特效

 02、需要在ClassDefaults中指定Cue的标签,这个适当其他的GameEffect发生的时候,可以通过指明当前Cue的标签,从而达到调用的目的

03、在GE_HealthRegen_Reply中指明Cue的标签

生命回复的时候消耗法力,播放特效

翻译这套教程关注的重点在于GAS的使用,故省略UI、特效设计这部分的介绍(如果需要我把这部分内容放上去的话请在下方留言),另外关于Delegate的介绍,可以参见UE4 Scripting with C++_04这篇文章

下一节介绍冲刺技DashAbility

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值