在这一篇里面,我们接着优化技能,现在角色添加的主动技能能够同步到ui上面。我们在这一篇文章里面,完善技能的消耗(释放技能减少蓝量)和冷却机制。

我们可以看到,在技能类默认值这里,可以设置它的冷却和消耗的GE

79. UE5 RPG 创建技能冷却和消耗_运行测试


所以,我们接下来,将通过GE实现对技能的冷却和消耗的设置。

添加技能消耗GE

我们首先创建一个蓝图,选取的父类为Gameplay Effect

79. UE5 RPG 创建技能冷却和消耗_运行测试_02


将其命名为GE_Cost_FireBolt,意为火球术的消耗

79. UE5 RPG 创建技能冷却和消耗_技能冷却_03


消耗我们持续时间选用Instant即可

79. UE5 RPG 创建技能冷却和消耗_UI_04


然后我们增加一个Modifiers,减少角色的蓝量,每次使用技能减少20

79. UE5 RPG 创建技能冷却和消耗_UI_05


一个简易的消耗GE制作完成,我们将其应用给技能

79. UE5 RPG 创建技能冷却和消耗_运行测试_06


接下来,我们还要在技能里调用Commit Ability节点,这个节点会将扣除技能所需的蓝量,如果有冷却,会将技能进入冷却时间

79. UE5 RPG 创建技能冷却和消耗_技能冷却_07


Commit Ability是扣除蓝量和冷却的一个统一节点,当然,你也可以分开,有单独扣除消耗和冷却的节点

79. UE5 RPG 创建技能冷却和消耗_ue5_08

运行测试效果

79. UE5 RPG 创建技能冷却和消耗_技能冷却_09

分析CommitAbility

首先我们判断如果没有足够的蓝量,技能会不会被激活,我们在处理消耗之前,打印一个数据

79. UE5 RPG 创建技能冷却和消耗_运行测试_10


如果蓝量足够,能够成功打印,而如果蓝量无法支持技能的释放,将无法打印,证明如果没有足够的资源,将不会进入技能,而不是由Commit Ability来判断,Commit Ability只是用来消耗资源的节点。

79. UE5 RPG 创建技能冷却和消耗_技能冷却_11


我们查看源码,它调用的代码为K2_CommitAbility

79. UE5 RPG 创建技能冷却和消耗_UI_12


里面调用了CommitAbility来实现逻辑,然后检查是否消耗足以提供给技能,并调用函数扣除资源

79. UE5 RPG 创建技能冷却和消耗_技能冷却_13


CommExecute为扣除资源函数,内部调用了扣除资源和冷却

79. UE5 RPG 创建技能冷却和消耗_ue5_14


看一下应用冷却,会获取技能等级,并将GE应用给了ASC

79. UE5 RPG 创建技能冷却和消耗_技能冷却_15


应用资源消耗同理,也是获取了技能等级

79. UE5 RPG 创建技能冷却和消耗_UI_16

设置技能等级消耗不同的蓝量

现在,我们知道了使用技能消耗,可以通过技能等级来修改它的消耗的蓝量,我们可以通过表格来定义不同的等级,蓝量的消耗。

所以我们创建一个新的曲线表格,用于设置不同等级的技能的蓝量消耗

创建一个曲线表格,类型选择Constant,将每一级的蓝量消耗设置为固定值

79. UE5 RPG 创建技能冷却和消耗_ue5_17


命名为CT_Cost

79. UE5 RPG 创建技能冷却和消耗_UI_18


在内部添加火球术1级到10级的技能蓝量消耗

79. UE5 RPG 创建技能冷却和消耗_技能冷却_19


然后在GE这里使用曲线表格,选择创建的这一行,并将数值设置为-1

79. UE5 RPG 创建技能冷却和消耗_ue5_20


接着在代码里面将初始技能的等级修改掉,用来测试

79. UE5 RPG 创建技能冷却和消耗_运行测试_21


释放一个技能后,蓝量是之前的三倍之多,证明设置的没有问题

79. UE5 RPG 创建技能冷却和消耗_技能冷却_22

添加技能冷却

技能冷却的实现原理是通过在冷却阶段给ASC应用了一个冷却标签,在冷却标签存在的时间内是无法再次使用此技能。
所以,我们要实现冷却,先创建一个冷却使用的标签

FGameplayTag Cooldown_Fire_FireBolt; //火球术冷却标签
  • 1.

然后注册到标签管理器

GameplayTags.Cooldown_Fire_FireBolt = UGameplayTagsManager::Get()
		.AddNativeGameplayTag(
			FName("Cooldown.Fire.FireBolt"),
			FString("火球术冷却标签")
			);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

创建一个火球术冷却GE

79. UE5 RPG 创建技能冷却和消耗_ue5_23


将GE修改为具有时效性的Has Duration

79. UE5 RPG 创建技能冷却和消耗_ue5_24


这里看到,冷却时间可以使用我们之前修改数值的多种方式去设置,这里我们使用最简单的,直接设置1s

79. UE5 RPG 创建技能冷却和消耗_ue5_25


这里我们不需要修改角色相关内容,只需要在此GE生效时,给ASC增加冷却标签,我们添加一个Target Tags Gameplay Effect Component

79. UE5 RPG 创建技能冷却和消耗_UI_26


通过此组件给Actor添加一个冷却标签,将我们创建的冷却标签添加上去

79. UE5 RPG 创建技能冷却和消耗_UI_27


然后在技能里将冷却应用

79. UE5 RPG 创建技能冷却和消耗_技能冷却_28


运行测试,发现,我们只能在一秒内释放一次技能。角色技能我们一般只对一个角色生成一个实例,为了防止客户端在技能未触发就关闭了技能,我们将在技能的蒙太奇动画结束或者混出的被强制取消时,结束技能,并在技能结束时,能够继续播放蒙太奇。

我们还需要将Retrigger Instanced Ability开启,它将再次触发时,关闭之前的触发。

79. UE5 RPG 创建技能冷却和消耗_UI_29

后续:现在我们有了消耗,也能正确的显示到了UI上面,但是冷却还没有实现使用技能后,技能UI上面无法显示技能冷却的进度,我们将在后续实现监听冷却技能的变动,并显示到UI上面。