10

主题

6

回帖

407

积分

管理员

积分
407
发表于  2023-12-11 13:14:14 | 显示全部楼层 |阅读模式 624 0
肉鸽游戏中经常会有抽取强化buff的环节。这个强化buff是添加在角色身上的,但是它可能只是强化了角色的某个技能或者某个属性。表现上,这个强化buff是添加在角色身上的;逻辑上这个强化buff则仅仅作用在某个技能和属性。表现和逻辑上的作用域大小是不一样的,下面将会讲解如何利用编辑器中的魔法效果实现常见的强化buff,并提及一些常见的问题。
1、特定的技能造成伤害时,对敌方单位造成持续伤害(流血烧伤)
例子:刺破——轻击让敌人流血,每秒造成5点伤害,持续3秒
对于这类强化buff,我们在实现的过程中最好把他们拆分成两部分,一部分是施加在角色本身的强化buff,另一部分则是施加在敌方单位身上的一个debuff。这样做会让逻辑更加清晰,我们可以在debuff魔法效果上实现针对每一个实体的代码逻辑。
下面讲解两种实现方式,以刺破举例:

这个项目下我们使用了一个英雄模板单位、一个轻击技能,技能触发器中仅有造成伤害的语句。
1.png
新建两个魔法效果,“刺破“是需要添加到玩家单位身上的,而“刺破-持续伤害“是需要添加到被玩家单位轻击攻击到的敌方单位身上的。
2.png
对于魔法效果的覆盖类型,这里不作讲解。可以按照下图进行魔法效果的初始设置。
3.png 4.png
刺破下按如下图所示写一个触发器。需要关注的是,我们向受击单位添加 “刺破-持续伤害”的时候,标明的魔法效果的来源单位以及关联技能(这在后续的逻辑种可能导致问题)。
5.png
接下来,我们只需要去 “刺破-持续伤害”中实现持续受伤的逻辑即可。
关于每秒造成一次伤害的实现,很多同学可能会想通过计时器来实现,每隔一秒对敌方单位造成伤害。其实没必要,魔法效果内置了这种功能。

物编中修改 “刺破-持续伤害”的循环周期为1。
6.png
然后在 “刺破-持续伤害”的触发器中实现下图的代码。需要注意的是,我们为这个持续伤害设置了伤害所属以及所属的技能。
7.png
其实到这里,我们的刺破逻辑功能就完成了,感觉似乎是没有问题的,直接进游戏测试一下试试。

为了方便测试,我就直接在游戏初始化的事件中为玩家单位添加了刺破的强化效果。别忘了,“刺破”是添加到玩家单位上的,而 “刺破-持续伤害”是添加到被玩家单位的轻击攻击到的敌方单位身上的。
8.png
测试后,你会发现确实能够触发持续伤害的效果了,但是怎么停不下来?!
其实是因为我们在实现“刺破”的触发器逻辑的时候,选择了使用子触发来监听玩家单位什么时候用轻击技能造成了伤害,然后我们在添加 “刺破-持续伤害”的时候,又设定了 “刺破-持续伤害”的来源单位以及关联技能,这导致“刺破-持续伤害”造成伤害时,也被视作玩家单位使用轻击造成了伤害,导致又一次触发了“刺破”的触发器,程序认为玩家单位又一次使用轻击造成了伤害,永无止境的循环开始了。
对于这个问题,有一种解决方案是“刺破-持续伤害”造成伤害时候的伤害来源技能,设定为空技能,但这样设置会有一个潜在的隐患,当我们之后的代码逻辑需要获取这次伤害的来源技能时,可能会出现获取到空技能的情况。到时候再debug,找到问题的源头可能会非常困难,因此是不推荐将来源设定为空技能的,它理应有一个伤害来源。
那么该如何解决这个问题呢,导致问题的核心在于我们使用了子触发来监听玩家单位什么时候用轻击技能造成了伤害,这个监听的方式,有好处也有坏处。
先说坏处:
第一个就是可能导致上面的无限循环的逻辑出现;
第二个是损耗了游戏性能,每当游戏单位造成了伤害,我们都需要判断造成伤害的技能是不是轻击;
再说好处:

我们能够做到在不修改技能代码的前提下,把强化效果的逻辑都集成在魔法效果中。这在团队开发中非常重要,这样写能够减少包体合并时的工作量。如果选择不使用子触发监听的方式来实现,那无法避免地需要对技能代码进行修改,如下图所示。这相当于我们将魔法效果的逻辑都写到了技能当中。这样写,一是在魔法效果里看不到具体的逻辑;二是必须严格保证团队里只有一个人能去修改技能中的代码,否则合包的时候将会增加大量琐碎的工作量(如果团队里只有一个开发全权负责开发就没有这种问题了,开发爱怎么写怎么写)。
9.png
分析完使用子触发监听的优劣,最后来讲讲对于这种无限循环的问题,目前想到的解决方案。
1.最简单粗暴的方法,放弃使用子触发监听的方式,改写技能。

2.坚持使用子触发,可以尝试将轻击造成的伤害视为普攻,而“刺破-持续伤害”造成的伤害不视为普攻。然后在子触发的条件中多加一条,如下图。
10.png
关于这两种方法,具体使用哪种,请自己权衡利弊。
事实上,使用子触发监听的方式并不是万能的。有时候我们不得不将代码逻辑写到技能代码中(没有合适的事件或者无法解决无限循环的问题)。

说回开头,估计很多人会想问,为什么最开始要把一个强化效果分为两部分,一部分是施加在角色本身的强化buff,另一部分则是施加在敌方单位身上的一个debuff。大家可以自己尝试一下不分为两部分的方式实现。
——————————————
后续可能会更新其他常见强化buff,目前只写了刺破这一类型(2023.12.11)