Bootstrap

103. UE5 GAS RPG 实现奥数爆发消耗和冷却 以及技能的描述

接着上一篇,我们实现一下技能对玩家友好的设定,设置实现多个技能的描述,方便玩家查看技能的相关信息。
之前的闪电链的技能的描述我们也未实现,在这里,我们将它们一起实现。

实现技能描述

首先,我们对技能创建对应的派生类,用于设置技能描述。
在这里插入图片描述
奥术爆发是继承的伤害技能类
在这里插入图片描述
闪电链继承RPGBeamSpell类
在这里插入图片描述
我们创建两个对应的派生c++类,用于覆写对应的函数。
在技能基类里,我们创建了对应的可覆写类,方便后续类覆写,由于当前等级和下一等级的技能描述内容相似太多,所以我们抽离出了一个单独函数,不同的部分作为参数传入。
在这里插入图片描述
在奥术爆发类里,我们覆写对应的三个函数

FString URPGArcaneShardsAbility::GetDescription(int32 Level)
{
	return GetDescriptionAtLevel(Level, L"奥术爆发");
}

FString URPGArcaneShardsAbility::GetNextLevelDescription(int32 Level)
{
	return GetDescriptionAtLevel(Level, L"下一等级");
}

FString URPGArcaneShardsAbility::GetDescriptionAtLevel(int32 Level, const FString& Title)
{
	const int32 Damage = GetDamageByDamageType(Level, FRPGGameplayTags::Get().Damage_Arcane);
	const float ManaCost = GetManaCost(Level);
	const float Cooldown = GetCooldown(Level);
	
	return FString::Printf(TEXT(
		// 标题
		"<Title>%s</>\n"

		// 细节
		"<Small>等级:</> <Level>%i</>\n"
		"<Small>技能冷却:</> <Cooldown>%.1f</>\n"
		"<Small>蓝量消耗:</> <ManaCost>%.1f</>\n\n"//%.1f会四舍五入到小数点后一位

		// 技能描述
		"<Default>首次激活技能使用魔法光圈划定攻击位置,再次释放在魔法光圈位置生成 %i 奥术碎片,攻击附近敌人,造成</> <Damage>%i</> <Default>点奥术伤害。</>"),

		// 动态修改值
		*Title,
		Level,
		Cooldown,
		-ManaCost,
		FMath::Min(Level, MaxNumShards),
		Damage);
}

闪电链技能类里雷同

FString UElectrocute::GetDescription(int32 Level)
{
	return GetDescriptionAtLevel(Level, L"闪电弧");
}

FString UElectrocute::GetNextLevelDescription(int32 Level)
{
	return GetDescriptionAtLevel(Level, L"下一等级");
}

FString UElectrocute::GetDescriptionAtLevel(int32 Level, const FString& Title)
{
	const int32 Damage = GetDamageByDamageType(Level, FRPGGameplayTags::Get().Damage_Lightning);
	const float ManaCost = GetManaCost(Level);
	const float Cooldown = GetCooldown(Level);
	
	return FString::Printf(TEXT(
		// 标题
		"<Title>%s</>\n"

		// 细节
		"<Small>等级:</> <Level>%i</>\n"
		"<Small>技能冷却:</> <Cooldown>%.1f</>\n"
		"<Small>蓝量消耗:</> <ManaCost>%.1f</>\n\n"//%.1f会四舍五入到小数点后一位

		// 技能描述
		"<Default>使用闪电攻击敌人,并在命中敌人后,向外扩散 %i 条闪电链,造成</> <Damage>%i</> <Default>点雷电伤害,在技能结束时对敌人造成</><Time>%i</><Default>秒的眩晕效果。</>"),

		// 动态修改值
		*Title,
		Level,
		Cooldown,
		-ManaCost,
		FMath::Min(Level, MaxNumShockTargets - 1),
		Damage,
		static_cast<int>(DeBuffDuration));
}

编写完成打开UE,在技能类设置这里,修改技能蓝图的父类
在这里插入图片描述
奥术爆发这里,我们添加了一个最大生成个数,方便代码和蓝图里调用
在这里插入图片描述
在激活技能时,我们通过技能等级和最大个数,来获取当前技能生成的个数。
在这里插入图片描述
接着运行查看效果
在这里插入图片描述

实现技能消耗

实现技能消耗比较简单,我们创建一个曲线表格
在这里插入图片描述
设置曲线插值类型
在这里插入图片描述
这里我将之前技能的值也移动到了此表格内,用插值而不是使用常量来实现
在这里插入图片描述
接着创建一个GE,来修改角色蓝量
在这里插入图片描述
应用给目标即可。
在这里插入图片描述
等待技能触发时,去掉所需的冷却和消耗
在这里插入图片描述

实现技能冷却

在标签管理器增加新的标签,这个标签主要是用于UI监听技能冷却使用。
在这里插入图片描述
在技能数据配置这里,设置上冷却标签,UI可以通过配置获取到技能的冷却标签,通过task进行监听
在这里插入图片描述
创建冷却GE,在激活技能时,ASC会去判断自身是否拥有冷却技能对应的标签,如果拥有一项,意味着技能未激活,如果成功激活,则将冷却GE应用给自身。
在这里插入图片描述

技能截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

;