首先更改我们的获得技能方法的内容:
更改后如下:
1 void AShinbi::AquireAbility(TSubclassOf<UGameplayAbility>list){
2
3
4 //读取GameplayAbility
5 if (AbilityComp) {
6 //为主角添加技能,FGameplayAbilitySpec是从菜单中选取的具体的技能,并将技能的各项属性打包到FGameplayAbilitySpec结构体中
7 //通过AbilityComp添加技能。而AbilityComp组件是属于主角的,所以主角可以拥有该技能。
8 AbilityComp->GiveAbility(FGameplayAbilitySpec(list, 1, 0));
9 //初始化主角技能,填入技能的拥有者和发起者。
10 AbilityComp->InitAbilityActorInfo(this, this);
11 //播放攻击动画
12 //PlayAnimMontage(montageAttack);
13 //激活攻击能力,该攻击能力主要加载了技能CD。
14 }
15 }
再更改下攻击技能的内容。
取消了蒙太奇动画的播放。
1 void AShinbi::Attack()
2 {
3
4 auto GA_Melee = LoadClass<UGameplayAbility>(NULL, TEXT("GameplayAbilityBlueprint'/Game/BP/Abilities/GA_Melee.GA_Melee_C'"));
5 AbilityComp->TryActivateAbilityByClass(GA_Melee, true);
6 }
新建一个GameplayAbility的蓝图。
再新建一个GameplayEffect蓝图。
设置技能冷却时间为1.0秒
在GrantedTags一栏为技能添加标签,必须添加,内容随意。
打开新建好的GameplayAbility蓝图,选择好刚设置完成的GameplayEffect蓝图,这里我起名为GE_CD。
在GameplayAbility蓝图中如此连线。
CommitAbility是通知GE_CD,校验其有效性,然后播放动画,注意,该播放动画的函数来自Ability栏目。
最后记得使用EndAbility,结束技能释放过程。
在技能释放过程中,再次点击技能,无法释放,等技能冷却1秒钟后,可以再次释放。
效果如下:
整体过程是,AquireAbility方法将技能注册到角色上,按鼠标左键进行攻击,攻击时候,激活技能。在GameplayAbility中会激活GameplayEffect效果,播放动画,然后结束技能释放。