接着上一篇,我们实现一下技能对玩家友好的设定,设置实现多个技能的描述,方便玩家查看技能的相关信息。
之前的闪电链的技能的描述我们也未实现,在这里,我们将它们一起实现。
实现技能描述
首先,我们对技能创建对应的派生类,用于设置技能描述。
奥术爆发是继承的伤害技能类
闪电链继承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应用给自身。
技能截图
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 103. UE5 GAS RPG 实现奥数爆发消耗和冷却 以及技能的描述
发表评论 取消回复