《英雄联盟》第170个英雄梅尔,已经上线正式服有段时间了,拳头游戏在6月18日才想起发布一篇开发者播客,让设计师来聊聊梅尔的核心机制——W技能的反弹。如果你看过《双城之战》第二季,你可能会记得这样一个场景:一名背叛的执法者让凯特琳跪在地上,准备扣动扳机,而安蓓萨在一旁冷眼旁观。然而,子弹被反弹,梅尔救下了凯特琳,违抗了自己的母亲,并在一瞬间击败了麦迪,这场戏令人印象深刻。

在设计梅尔加入游戏时,拳头游戏明确知道她的W技能将是核心技能。但正如任何游戏设计师都会了解的一件事,反弹技能的设计非常复杂。他们需要克服技术难题,处理各种不同的投射物交互,还要考虑平衡性、清晰度和伤害计算。Riot 1kFeathers是梅尔项目的技术负责人,在这篇开发者博客中谈论了这个机制是如何设计出来。
由于这是发表在拳头官网的文章,国服一般不会翻译,Sara就在这里简单翻译一下。但这种开发者博客的专业术语太多了,普通玩家不容易看懂,这主要是提供一个思路。梅尔是一个在多方面极具挑战的项目,实现了《英雄联盟》从来没有过的反弹机制。如果你是梅尔玩家、投射物爱好者,或者对反弹技能的技术实现感兴趣,这篇文章正是为你准备的。

-反弹的起点
早在2022年,我们就计划与Fortiche合作,在2024年《双城之战》第二季发布时,将梅尔和安蓓萨等原创角色引入游戏。同时,我们希望探索反弹技能的可能性。我与梅尔的英雄设计师Riot Emizery讨论了这一技能的设计方向。
在《双城之战》中,梅尔是一位能够操控投射物和魔法技能的法师。我们已经有一个可玩的“进攻型技术”原型,类似于塞拉斯窃取敌人终极技能后回放的能力。但我们还想尝试“防御型技术”,即实时反弹投射物,这是我们之前因技术限制从未实现的。我对此非常感兴趣,原因有三:
1. 它更贴近梅尔在动画中的能力表现。
2. 这是《英雄联盟》从未探索的设计空间,但在其他游戏中很受欢迎。
3. 实时反弹能带来令人满足的技巧表达。
于是,我制作了一个实时反弹的原型并进行测试,玩家反馈良好。尽管我们知道这是一个巨大的挑战,复杂度堪比塞拉斯、维戈或妮蔻的技能,我们还是决定推进。那么,这个技能是如何实现的呢?
-什么是投射物?
要理解投射物反弹的原理,首先需要了解什么是投射物。投射物是技能移动的载体。如果你读过十年前关于投射物系统重构的文章,你会知道投射物包含以下关键组件:
普通投射物:
- 移动:投射物会移动到指定位置。
- 碰撞:投射物会与物体发生碰撞。
- 目标追踪:投射物会追踪移动目标。
- 脚本交互:投射物需由设计师定义行为。
- 可见性:投射物对某些单位可见,对其他单位不可见。
- 视觉与音效:投射物需要视觉效果和音效。

反弹投射物:
- 移动:清除当前目标,朝新目标位置或单位移动。
- 碰撞:不再与梅尔队伍的单位碰撞,而是与施法者队伍的单位碰撞,因为梅尔“劫持”了投射物。
- 目标追踪:若投射物追踪移动单位,应改为追踪另一单位(通常是施法者本人)。
- 脚本交互:反弹投射物继承原投射物的脚本定义。例如,佐伊E技能的泡泡被反弹后仍会使目标昏睡。
- 可见性:反弹投射物的可见性规则反转,视为梅尔队伍的投射物。
- 视觉与音效:为反弹投射物播放正确的视觉效果和音效。
-区域触发器
我们需要一个机制在投射物接触时进行交互并将其反弹。这听起来有些熟悉,对吧?亚索的风墙能阻挡投射物继续前进,检测区域内的投射物并销毁它们。而对于反弹技能,我们更进一步,不仅不销毁投射物,还会修改并将其返还。了解了投射物和区域触发器的交互后,我们准备打造投射物反弹系统的首个原型。三年前的我提出了以下方案:
- 使用区域触发器处理投射物碰撞检测和反弹逻辑。
- 在形状类中定义通用的OnMissileReflect逻辑,适用于任何实现相应功能的形状。
- 重置投射物视觉效果,使其重新开始生命周期并调整为正确方向。
- 使用“狂暴”系统(为烈娜塔终极技能开发)将梅尔设为技能新拥有者。
- 梅尔被视为投射物的伤害来源,继承所有扩展效果(如佐伊E的泡泡效果)。伤害根据原施法者的属性计算。
如果你读过烈娜塔首席工程师Jeff Doering发布于2022年的技术博客,你会了解“狂暴”系统。在梅尔的情况下,我们“狂暴”的是技能,而非像烈娜塔那样的普通攻击。梅尔被设为“狂暴”的触发者,计算伤害或击杀时,她被视为伤害来源并获得所有奖励。

投射物分为两类:目标型和非目标型。目标型投射物有固定目标,无真实碰撞(如安妮的Q)。非目标型投射物是技能射击,可能击中路径上的任何目标或落空(如伊泽瑞尔的Q)。
- 目标型技能(如凯特琳的R):反弹时检查施法者,始终将技能返还给施法者。
- 非目标型技能(如伊泽瑞尔的Q):反弹时将技能返还至施法者的位置。
-投射物重建
这样就完成了吗?还没那么简单。原型未能很好处理非线性移动的投射物,如黛安娜的Q、悠米的Q和奇亚娜的R。这些投射物有复杂的移动方式:
- 奇亚娜的R沿墙移动。
- 悠米的Q跟随玩家光标。
- 黛安娜的Q是平滑曲线的样条投射物。
虽然可以通过继承实现针对每种移动类型的函数,但我退一步思考,决定从零开始重建投射物,传入新的目标位置或单位。投射物初始化过程会自动处理目标追踪问题。因此,我们选择销毁来袭的投射物,并根据其信息重建一个新投射物。这带来多重好处:
- 解决了非线性投射物问题,因重建投射物无需为每种移动类型单独实现逻辑。
- 修复了反弹投射物方向错误的视觉效果问题。新投射物从零开始,确保视觉效果稳定且可持续。
- 解锁了延迟生成反弹投射物的功能,有助于平衡技能。
-投射物劫持
我们希望反弹伤害随法术强度成长,并可调整,因此梅尔会施放新技能,类似于塞拉斯。但她只劫持与投射物相关的部分,而非整个技能(包括施放动画、蓝量消耗等)。投射物移动或撞击触发的效果由梅尔继承。
这解决了反弹友方治疗和护盾的问题,梅尔会对友方施放治疗或护盾,但需要额外工作来修复这些技能(如赛娜的R、娜美的W等)。同时,这允许调整反弹投射物的伤害输出,并继承可再次施放的技能(如李青的Q、阿卡丽的E、维克斯的R等):
- 原施法者无法再次施放,因技能流程已结束。
- 若满足再次施放条件,梅尔可再次施放。

-伤害重新计算
目前,我们使用区域触发器检测投射物,销毁原投射物并由梅尔重建新投射物。但问题在于,新投射物由梅尔施放,伤害会基于她的属性计算。想象一级梅尔反弹18级全AD装备厄斐琉斯的普通攻击,反弹伤害会微不足道,因梅尔的AD很低。这不符合设计目标:敌方越强,梅尔的反弹技能应越强。
为此,我们需要使用原施法者的属性(AD/AP)计算伤害。为实现这一点,我们创建了一个字典,存储反弹技能射击、对应施法者和施放时的等级。以提莫为例:若提莫用E毒镖攻击梅尔,毒镖接触反弹护盾时,我们存储提莫的角色引用和等级。当毒镖反弹并伤害提莫时,我们查询字典,使用提莫的等级和属性计算伤害。
但塞拉斯以不同方式解决此问题,他使用自身属性,将AD伤害比例转为AP比例,因他是一位AP刺客。而梅尔的反弹技能将投射物返还给原施法者,因此使用施法者属性更合理。
-投射物重新着色
开发初期我们就知道,在激烈的团战中,反弹技能可能难以辨认。我们考虑过使用附加粒子效果标示反弹,但最终决定为反弹投射物重新着色,既更显眼,也能传达梅尔掌控投射物的感觉。《英雄联盟》引擎原本无法任意重新着色物体,因此我们与引擎图形团队的工程师Riot Mewdini合作实现这一功能。以下由她讲解:
大家好!我是Riot Mewdini,来说说梅尔重新着色技术的实现和挑战。我们的首个方法是动态克隆反弹投射物的材质,并为克隆材质添加重新着色宏。这在反弹瞬间会造成卡顿,但作为概念验证效果不错。之后,我添加了对重新着色渐变的支持,允许艺术家将投射物的亮度值映射到颜色范围,为梅尔的皮肤设计提供了更多自由度。
另一种方法是在加载时为相关投射物创建支持重新着色的材质。但这导致内存占用过高,例如,若游戏中有元素使者拉克丝,内存占用会增加约35MB。对于最低配置仅2GB内存的系统,这不可接受。
我们还希望避免在着色器中使用ifdef宏,因这会导致受影响的着色器变体数量翻倍。随着需要支持重新着色的着色器增加(因各种边缘情况),包括所有粒子着色器和小兵的Uber着色器,变体数量都会加倍。最终我们采用的方案更简单:为受影响的着色器添加始终开启的重新着色指令。当不需要重新着色时,传递零透明度,保持原色不变。
此方案修复了早期bug,如金克丝的地雷未被重新着色(因其被视为小兵)。其他bug需单独修复,并在广泛的QA测试中发现,包括:
- 因代理粒子系统的抽象,子粒子未继承重新着色(如烈娜塔终极技能的复杂视觉效果)。
- 厄斐琉斯的炮台被反弹后尝试攻击厄斐琉斯时崩溃,因炮台投射物无法访问颜色渐变数据。
- 阿萝拉的召回投射物因归属混乱而不可见。
- 非目标型技能有时引发除零错误(如泰隆)。
- 旧版粒子未传递关键字,这些关键字用于定义不同皮肤的粒子效果条件(如兰博的旧版皮肤)。
还有更多问题,如“黑洞故障”,由投射物复制与反弹之间的竞争条件引发,这种情况在有两个梅尔时会出现。

-平衡性
我们解决了投射物反弹系统的大部分问题,玩家在测试中体验到了被梅尔反弹招牌技能的感觉。不出所料,他们对此并不开心。因此,我们需要解决一个严肃问题:如何平衡这个技能?Riot Emizery提出了两个主要调整杠杆:
1. 调整反弹投射物的伤害/控制效果:通过反弹逻辑的监听事件实现。当梅尔通过反弹对敌方英雄造成伤害时,计算伤害后应用百分比减免。游戏中,W技能等级越高,减免百分比越高。
2. 控制投射物反弹的延迟:我们在投射物反弹系统中添加了计时器。目前游戏中未使用此功能,但我们有方法控制投射物飞向目标的时机。
-面向未来
类似于塞拉斯的R,我们需要让梅尔了解英雄的被动技能,因为被动技能封装在独立对象中,不属于技能本身。许多技能脚本假设施法者始终是该英雄。例如,安妮的Q假设安妮是施法者并查找其被动。但梅尔施放安妮的Q时没有安妮的被动。为此,我们将许多技能移到共享位置,移除对英雄本身的依赖。这改善了技能目录的封装,为未来英雄、游戏模式和灵活性打开更多可能性。
在我们的专有引擎和工具Hextech中,我们升级了许多英雄脚本,采用现代化的数据查找、属性处理和伤害应用标准,以兼容投射物反弹系统。这为游戏的长期成功奠定了基础。投射物反弹技术开启了更多可能性,我们现在可以修改投射物并转移其所有权。
热门跟贴