虚幻回合制游戏战斗框架-护盾的实现

本篇讲解一下使用GAS实现护盾机制的方法。

飞书文档

虚幻回合制游戏战斗框架​jfpejv68no.feishu.cn/docx/YFATdbdQfouMtAxYqCCcacVPnkd

护盾机制的实现

首先谈一谈我设想的一种护盾实现机制,很简单,但是能够很方便的实现护盾的堆叠和抵消伤害。

在游戏代码中,会同时存在ShieldShieldMax两个属性。Shield为实际的护盾值,用于抵扣伤害。

所有的护盾作为一个有持续时间的buff,只会修改ShieldMax属性,当ShildMax增加delta时,则Shield会相应的增加delta数值。

当护盾buff到了持续时间消失,若新的ShieldMax大于Shield,则不需要修改护盾值。如果新的ShieldMax小于Shield,则修改Shield让它小于等于ShieldMax。

如果收到伤害,则Shield减少对应的值。

OK,护盾逻辑只需要遵循以上三条逻辑,就可以很简单的实现了。

接下来用几个实际情况来举例。假设游戏中有七月三和卓鸭两个角色

  1. 七月三对卓鸭施加了一个持续两回合的300数值的护盾,卓鸭此时护盾值为300/300
  2. 卓鸭被敌人攻击,造成了100点伤害,卓鸭此时的护盾值为200/300
  3. 卓鸭受到伤害后会获得一个200的护盾,此时的护盾值为400/500
  4. 七月三给予的护盾持续时间结束,卓鸭的护盾最大值减少300,护盾值变为200/200

接下来再举一个例子

  1. 七月三对卓鸭施加了一个持续两回合的300数值的护盾,卓鸭此时护盾值为300/300
  2. 卓鸭被敌人攻击,造成了200点伤害,卓鸭此时的护盾值为10/300
  3. 卓鸭受到伤害后会获得一个200的护盾,此时的护盾值为300/500
  4. 卓鸭被敌人攻击,造成了200点伤害,卓鸭此时的护盾值为100/500
  5. 七月三给予的护盾持续时间结束,卓鸭的护盾最大值减少300,护盾值变为100/200

是不是很简单就实现了一个护盾的效果!

代码实现

  1. 定义护盾值和护盾最大值两个属性
  1. 创建函数,用于在某个属性最大值改变后,修改对应属性的数值
  1. 重写Pre属性修改函数

当修改的属性为护盾最大值时,调用AdjustAttributeForMaxChange函数

  1. 对伤害的处理,这里建议使用一个中间属性Damage Attribute去计算伤害,而不是直接修改生命和护盾

根据伤害修改护盾值和生命值

护盾的技能效果

然后谈谈护盾一些技能效果应该如何实现。这里只谈大概的思路,因为我也懒得写代码了(瘫倒),代码这种东西怎么实现都行,不重要,有了思路之后写是很简单的。

反击

我们游戏的角色七月三除了可以给队友施加护盾,当拥有护盾的队友被敌人攻击时,还可以对攻击者进行反击,释放一次攻击。

首先创建一个收到伤害的委托,角色每次收到伤害都会广播,这里建议可以直接使用Lyra的Message Router作为消息的发送和接受(参考飞书文档最后结尾的unreal tips)

创建一个DamageEvent用于存储伤害相关的数据

如何表明本次伤害有护盾伤害有很多的方法,我这边用的是一个Tag Container存储所有的伤害tag信息。如果对护盾造成伤害那么就带有一个Damage.Info.Shield的tag即可。

收到消息后先判断被攻击的是不是自己的队友收到了护盾伤害,如果是则使用我上一篇的Action System插入一次反击技能即可。(参考上一篇文,或者飞书文档里的技能-连击模块)

护盾打击

攻击可以附加护盾值的额外伤害。这里还是有很多的实现方法,我这里给出三种的实现方法。

一种方法是参考我飞书文档里,技能-伤害-动态伤害模块里的写法,写一个被动技能,会给角色添加一个damage adjustment,这样角色每次制造伤害时可以额外的添加护盾的伤害。这种方法是当时设计出来最万能的,可以几乎调整任何情况下技能的伤害,但是相对也比较麻烦。

还有一种写法是比较简单,所有的伤害通过一个通用的函数去apply effect,当角色身上拥有某个tag时,通过Set By Caller额外输入护盾值作额外伤害数据,然后伤害计算时读取对应的值加到伤害里。

最后一种方法是,增加一个属性,叫做ShieldToDamagePercent,所有伤害计算时,伤害值都会增加ShieldToDamagePercent * Shield,而想要拥有护盾额外伤害,只需要修改对应的属性值即可。

三种方法各有优劣,也有各自适合的使用场景,需要自己去选择了。

如果还有其它想要了解的机制实现,可以给我评论或私信。如果有人对护盾的机制和功能需要更详细的代码讲解,在评论区告诉我吧。

相关推荐
VX_CXsjNo114 小时前
免费送源码:Java+SSM+Android Studio 基于Android Studio游戏搜索app的设计与实现 计算机毕业设计原创定制
java·spring boot·spring·游戏·eclipse·android studio·android-studio
Uzuki15 小时前
自动驾驶 | 为CarLA添加一辆小米SU7 Part I
自动驾驶·游戏开发·图形学
向宇it2 天前
【零基础入门unity游戏开发——2D篇】2D 游戏场景地形编辑器——TileMap的使用介绍
开发语言·游戏·unity·c#·编辑器·游戏引擎
双叶8363 天前
(C语言)单链表(1.0)(单链表教程)(数据结构,指针)
c语言·开发语言·数据结构·算法·游戏
二狗哈3 天前
go游戏后端开发21:处理nats消息
开发语言·游戏·golang
前端菜鸟日常3 天前
HMTL+JS+CSS实现贪吃蛇游戏,包含有一般模式,困难模式,还有无敌模式
javascript·css·游戏
火一线4 天前
【Framework-Client系列】UIGenerate介绍
游戏·unity
二狗哈4 天前
go游戏后端开发22:游戏房间功能
游戏·github
BingLin-Liu5 天前
蓝桥杯备考---》贪心算法之矩阵消除游戏
算法·游戏·贪心算法
苹果企业签名分发5 天前
游戏搭建云服务器配置推荐
运维·服务器·游戏