《层层梦境》:小型独立团队如何打造杀手级战斗系统

作者:1145
2024-03-31
13 5 0

编者按

本文来自 GDC 官方 Youtube 频道,原内容形式为视频演讲,indienova 对其进行了编译整理,以图文形式分享。原链接见文末。

  • 演讲人:伊恩·卡菲诺(Ian Cofino)
  • 译者:1145

正文

我是独立工作室 Afterburner Studios 联合创始人伊恩·卡菲诺,在游戏《层层梦境》(Dreamscaper)中,我负责设计、动画、VFX 和 UI 工作,还要处理其他无数项独立开发者要面临的任务。我进入游戏行业大概 10 年了,在此之前有过平面设计、MG 动画设计和电影行业的工作经验,也参与过 2A 和 3A 级的游戏项目,现在成功制作了一款侧重战斗的独立游戏。那么,我是怎么一路走到这里的呢?

2018 年夏天,我冒险辞去了传统开发工作,与两个朋友保罗·斯沃博达(Paul Svoboda)和罗伯特·泰勒(Robert Taylor)成立了 Afterburner Studios。这是我们在 2019 年 DreamHack 游戏节上的合影。

从左到右依次为伊恩、保罗、罗伯特

经过长达三年的开发和多次版本迭代后,我们于 2021 年 8 月 5 日在 PC 端以及 Switch 平台上推出了《层层梦境》1.0 版本。自发布以来,游戏吸引了超过 25 万名玩家,在 Steam 上获得了超过 1800 条评论,好评率高达 91%,这听起来有点不可思议。

《层层梦境》是一款在清醒与梦境中循环的 Roguelike 动作游戏。白天,你会体验卡西迪(Cassidy)的清醒生活,探索红港区(Red Haven),结识新朋友,与他人建立联系;夜幕降临时,你将在 Roguelike 式的梦境循环中直面卡西迪的噩梦。

战斗示例

本次演讲将分为三部分:设计(Design)、感受(Feel)和成功关键(Keys to success),希望为大家提供一套具体可行的速成课程。以下是我希望大家能从演讲中收获的内容:

  • 设计:资源有限的开发者在创建战斗系统时需要重点关注的领域
  • 感受:改善游戏感受时需要重点关注的领域,这些领域有助于设计出引人入胜且令人满足的战斗
  • 成功关键:有助于提高小型团队工作效率的个人心得

设计

我想先从设计上的考量因素说起,这些因素有助于为构建战斗系统奠定坚实基础。


创建坚固的支柱

定义玩家的体验感并将其转化为可行的目标是至关重要的。因此,我想重点讨论如何创建最有效的战斗支柱。

首先,找到正确的具体目标。使玩家感觉自己很强大是相当传统的目标,要如何调整这一目标以创造所期望的玩家体验呢?在创建支柱时,可将其进一步具体化,让玩家除了感觉自己很强大以外,还能感觉自己技能高超,是刺客或指挥官,甚至如同神一般。可以看到,在设想的力量范畴下依然有很大的设计空间,刺客和指挥官都是非常强大的角色,但展示力量的方式却截然不同。因此,过于笼统的支柱会因目标范围过于宽泛导致设计偏差,而过于具体的支柱则会使灵活性不足。必须找到对团队和预期目标最有意义的所在,以便明确适当的目标范围。

我们想创建一个既需要策略性思考,但也具有高度灵活性和技能上限的战斗系统。鉴于《层层梦境》是一款 Roguelike 游戏,系统的多样性和可重玩性也很重要。游戏使用了以下支柱,来看看它们如何指导了开发。

  1. 有目的的行动
    这是最重要的支柱。玩家需要知道他们的行动会造成后果,需要理解自己的策略选择,并在游戏中进行实时战术评估,以采取相应行动。

  2. 即兴性
    战斗应做到流畅,并为玩家提供自由发挥的空间。玩家可以采取多种方式来应对一种情况,游戏也应鼓励玩家在战斗中随机应变。

  3. 艰难但公平
    玩家需要感觉到命运更多掌握在自己手中,而不是被 Roguelike 随机数操控。这意味着需要谨慎考虑敌人行为,权衡局面并迅速做出反应,以便在犯错误时有改正余地。

  4. 动态交互
    为了与 Roguelike 架构相辅相成,战斗应该具有高度动态性。许多元素和系统需要相互交织,以创造出独特的情形和解决方案。这是可以在系统核心层面引入可重玩性的地方。

  5. 强反馈
    通过声音、视觉效果和动画,使玩家感知自己如何影响了游戏世界,并享受这些刺激。这是经典的“让游戏变得更有趣”的方式。

上述支柱都是相当高层次的设计,但它们足够有针对性,以便我们围绕想要实现的目标进行调整。战斗幻想(Power Fantasy)不需要专门作为一个支柱,因为在实现其他支柱的过程中,它会自然而然地完成。


玩家的选项

我们通常用动词来概括玩家在战斗中有哪些行为选项,比如奔跑、跳跃、射击、游泳等。这些行为将成为战斗系统的基本构成要素。

  1. 选项会增加游戏深度,但也带来了复杂性
    需要注意玩家的认知负荷,因为在特定时间内玩家拥有的选择越多,需要投入的心力就越多。由于《层层梦境》的核心支柱包括即兴性和动态交互,我们必须确保提供足够多的选项,以实现十足的深度和灵活性。

  2. 始终考虑核心受众是谁
    当选项会带来复杂性时,需要考虑什么程度的复杂性对核心受众是合适的。《层层梦境》瞄准的是偏硬核玩家,我们知道他们通常对 Roguelike 系统和近战系统比较熟悉,因此可以相对安全地提升复杂性,而不会让他们感到不堪重负。

    如果想避免复杂性,能否通过将选项做得少而深来实现深度呢?在《层层梦境》中,我们通过大量可互换的武器和技能来提升战斗深度,这些武器和技能相互作用,实现了创建动态交互系统的目标。同时,我们允许玩家以不同配置来熟练掌握游戏基础,例如,玩家始终能进行多段近战攻击和替代攻击,可将敌人打出三种状态之一。这意味着不论玩家使用哪种武器,他们始终知道自己拥有这些选项。《层层梦境》的基本选项有很多,因此,玩家适应新武器的过程让系统体现出一些深度感,且没有带来额外的复杂性。
  1. 考虑你的支柱
    这些选项如何推动我们朝设计目标前进呢?《层层梦境》有很多攻击选项,包括两种近战攻击、远程攻击,以及两种魔法攻击。攻击手段多样是为了确保玩家在战斗时感受到灵活性。此外,每种攻击都利用了分层系统,从而在彼此间创造出令人满意的互动。最后,有了这些选项,玩家感到自己的武器库足够丰富,便可以在任何时刻深思熟虑采取行动,而不必每次都以相同方式处理战斗。那么,支柱如何影响选项?举例来说,我们设计的闪避具有即时无敌效果,判定上也相对宽松,这使玩家感到更加即兴。如果玩家可以在困难情况下通过避开攻击拯救自己,也能感到更加公平。

  2. 考虑游戏规模
    鉴于所拥有的资源,你能否让设计的选项达到理想质量?你是否试图在资源有限的情况下提供过多选项?我们早期确立了一项原则,即跳跃不会成为动词之一,因为在战斗中加入跳跃会大大增加制作规模。近战攻击、替代攻击、远程攻击和魔法攻击等所有之前提到的动作,在跳跃时都将可使用。而且在战斗之外,还需要考虑遍历(Traversal)以及艺术设计和工程方面的因素。因此说到底,跳跃并没有让我们有效地朝支柱前进,至少不如我们探索的其他选项那样。

总而言之,玩家选项将构成战斗系统的核心。因此,在添加额外层级之前,需要花费一些时间对系统的基础设计进行迭代和完善。


摄像机

摄像机和构图是战斗体验的关键部分。当处理得当时,大部分情况下它们都难以察觉,但如果处理不当,它们将对玩家体验产生巨大影响,而这也恰好是玩家在游戏中会最早注意到的问题之一。

  1. 游戏类型
    摄像机的使用方式很大程度上和游戏类型有关。当提到即时战略游戏时,你会想到哪些作品?玩家会将这些游戏的类型惯例概念带入游戏体验中。以《层层梦境》为例,因为摄像机相对静态,并且采用远距离俯视角,所以玩家希望战斗能有一定速度和灵活性,与其他构图类似的游戏相近。

  1. 距离、互动性与游戏规模
    在第三人称动作游戏中,由玩家控制的近距离摄像机非常常见,它会增加表现力和冲击感。但由于摄像机距离动作更近,画面也需要更高保真度。需要注意,这种摄像机需要更高的迭代度,因为玩家最讨厌的事情莫过于不得不操纵一个无法正确定格动作的摄像机。

    较远的摄像机会削弱力度和冲击感,并且感觉上不那么电影化,但宏观视角为玩家提供了更多信息。此外,如果玩家停止控制摄像机,游戏会出现大量变量,而较远的摄像机不必处理这一点。并且较远的固定摄像机不需要太高保真度,因为在这个距离下无法捕捉到更多细节。因此,在思考哪种摄像机适合你的支柱时,也要考虑摄像机将如何影响游戏规模。当然,也有很多成功案例采取了完全相反的做法,但一般来说,摄像机距离越近,互动性越强,游戏规模就越大。

《层层梦境》在战斗中使用固定的变焦摄像机。有趣的是,这个选择减少了玩家反馈的冲击力,与我们的某个目标相悖。但在项目开始时,我们知道必须在某些方面缩小游戏规模,使用远距离固定摄像机更容易实现。为了接近目标,我们采用了一种混合解决方案,在玩家和敌人的动态构图上投入了大量时间。这对“有目的的行动”和“艰难但公平”两个支柱来说都很重要,因为玩家几乎可以随时看到完整战场,这为他们做出明智的战斗决策提供了必要信息。当玩家被一群敌人围住时,摄像机可以拉近以突出战斗的紧迫性。为了控制游戏规模,我们最终不得不放弃其中一个目标,但同时也更接近另外两个支柱。在项目中,这种情况经常发生,并非每个决策都会同时推动实现所有目标。因此,我们最终选择通过其他方式来实现“强反馈”支柱。


分层系统

我们如何堆叠系统以创造更丰富的战斗体验呢?一个有效的方法是给自己留出足够的设计空间,让系统在项目中有机地发展。这种方法带来了三点好处:

  1. 控制游戏规模
    许多相互关联的系统都是在不同阶段设计和实装的,因此不必在一开始得出所有答案。由于不用一次性完成所有工作,我们创建了一些可拆分管理的工作部分。这可以更容易地将功能作为附加部分进行分析,而不是作为整体的组成部分,如果是后者,整体系统就会在功能被剥离时受到影响。

  2. 迭代测试
    逐步构建的开发方式允许我们更早地通过持续性用户反馈充分测试战斗系统。这种工作方式降低了风险,我们不会因盲目开发后发现某个功能不起作用需要放弃,而浪费大量时间。

  3. 使想法得到充分发挥
    在引入新系统层级前有足够的时间重新评估当前系统。这使我们能够聚焦于有效的构想,因为我们已经对运行中的部分有了充分了解。

如何在不提高复杂性的情况下增加深度呢?在项目中期,我们已经建立了非常坚实的基础。我们发布了 EA 版本,并拥有提供反馈和数据的玩家社区。然而,我们觉得“动态交互”支柱还没有达到满意的效果。虽然战斗系统的一部分已经完成,比如物品编辑系统和状态效果系统,但它们的效果还不够。同时,我们也担心过多选择会给玩家带来负担。

因此,我们的解决方案是在后期引入元素系统,将元素属性分配给道具,并将该系统与状态效果系统相连。例如,火元素会对敌人造成持续伤害,冰元素会冻结敌人,水元素会减缓敌人速度。这些效果都相当标准,我们通过鼓励玩家对同一敌人使用混合元素攻击,奖励玩家触发自动暴击,造成双倍伤害等方式进一步提升了它们。我们在此基础上创建了一组被动增益道具,用于提升暴击伤害倍率或元素状态效果。需要注意的是,这些系统都不是在项目开始阶段完成的,而是在数月的持续努力后才得以实现。最终,这些方案提高了玩家的参与度,我们从玩家社区获得的反馈也非常积极,这在无需修改系统底层选项的前提下增加了游戏深度。最重要的是,对于我们这样规模的团队来说,此种方法非常易于管理,不必为了增加内容而扩大游戏规模,而可以专注于提升已有系统。

我们在游戏各部分均沿用这种方法。在开发的最后阶段,我们引入了一个相当强大的元进阶系统,它让平均游戏时间显著提升,大大提高了游戏黏性。这甚至不是我们在项目开始或中期考虑到的事情,但我们在早期设计中留下了灵活性,以便在后续阶段添加这些层级。


受击反应与敌人状态

敌人设计涉及到许多方面,可能需要更有经验的开发者来专门说明。我将专注于受击反应(Hit Reactions)和敌人状态(Enemy States),这两方面在独立游戏中经常被忽视,但对整体设计有着重要影响。

为什么要设计复杂的敌人状态,并投入资源来创建受击反应?除了增加互动性,让玩家有更多方式影响敌人外,它们还能在战斗中提供非常关键的实用性。你希望敌人如何对玩家的输入做出反应——这将成为战斗结构和节奏的基础。

《层层梦境》中的受击状态:

  1. 晕眩(Stun):默认受击状态。敌人在受到较弱的攻击后短暂失去平衡。

  2. 虚弱(Stagger):晕眩的加强版本。它使敌人需要更长时间从攻击中恢复,有助于玩家确定攻击目标的优先级,并传达不同攻击之间的力量差异。

  1. 击飞(Flyback):突显巨大冲击力的强烈反应,它对于战斗节奏非常重要。以击飞状态结束攻击会使玩家和敌人之间产生距离,重置进攻态势,迫使玩家从其他角度重新接近敌人。

  1. 弹起(Popup):能够展现垂直攻击的力量,并将敌人置于浮空状态。如果发现玩家在战斗中过于保守,这种状态非常适合鼓励他们主动攻击,因为他们能够在敌人无法做出反应时充分利用优势。

  1. 倒地(Knockdown):不会让敌人置于浮空状态,也不会将其击飞太远,因此玩家可以更快地进行攻击和后续行动。它也可以帮助玩家改变攻击目标,并展现向下攻击的力量。

这也是另一个分层系统案例。创建基础受击状态后,我们为关键受击状态添加了额外效果。对于“飞出”状态,被击中的敌人撞击并推开路线上的其他敌人时,后者也会受到伤害。当被击中的敌人撞到墙壁时,它们会受到额外伤害并被弹开。对于“弹起”状态,每次使敌人浮空都会增加它们触地时受到的伤害。而一个敌人置于“倒地”状态时,周围敌人会受到溅射伤害并被推开。上述额外效果都为受击反应系统增加了实用性和深度,同时又不会带来太多复杂性。这些设计需要大量工作,但从玩家体验的角度来说,回报非常高。尽管我们在动画制作方面受到了一些限制,我是项目中唯一的动画师,罗伯特是唯一的工程师,但我们还是抽出时间制作了受击反应,因为它以不同方式影响着每个支柱,对每个支柱都至关重要。

让我们从更高维度思考一下敌人状态的设计。敌人如何根据我的攻击而改变状态?一种受击反应是否包含多个状态?状态之间是否有循环?如果敌人在特定状态下被击中又会发生什么?你需要仔细考虑状态机,并了解这些交互如何影响系统运行。这可能会增加很多玩法、程序以及动画工作。虽然敌人状态可以简化为受轻击或重击,但我们依然在《层层梦境》中设计了如此多状态,这既是为了让玩家能够自由发挥,也是因为它们实现了我们追求的那种真实而直观的反馈。

玩家是否可以中断操作?何时可以中断?中断的原因又是什么?敌人从轻击、重击和特殊攻击中恢复需要多长时间?恢复时间主要受战斗速度和节奏影响。那么,玩家是否能够将敌人锁定在晕眩状态?通过受击状态控制敌人的设计对《层层梦境》来说非常重要,这意味着玩家必须随机应变,适当地将敌人锁定在晕眩和虚弱状态,以应对更多敌人。这大大有助于玩家确定攻击目标的优先级,从而采取有目的的行动,因为他们必须学会如何应对周围敌人。

这些状态如何随着挑战难度的增加而扩展?不同敌人是否会基于自身强弱、游戏进度或玩家强弱而做出不同反应?《层层梦境》用不同的受击状态来挑战玩家,初期敌人可以无限制地陷入晕眩,但随着游戏推进,后期敌人只会陷入虚弱状态,并且最终可能会对特定状态免疫。因此,受击反应不仅增强了攻击效果,还能为战斗系统增加一层功能深度。

感受

本节将介绍《层层梦境》在感受方面重点关注的领域,以确保战斗体验尽可能令人满意。


响应性

  1. 输入响应时间(Input response time)
    从玩家输入到屏幕上产生相应效果之间的时间越短,游戏的响应感就越强。不过,动作的保真度和响应的即时性之间存在一种平衡。对于像《层层梦境》这样资源有限的项目来说,我们优先考虑的是游戏的爽快感,而非保真度。

  2. 输入延迟(Input latency)
    这是另一个需要特别注意的方面,通常在 Switch 版本中容易被忽略。罗伯特发现,UE4 的游戏线程与渲染线程的同步会导致本地输入延迟。这使得输入延迟相当高,大约有 130 毫秒,相当于 60fps 下的 8 帧。因此,罗伯特通过使用低延迟的帧同步选项,将延迟几乎降低了一半。对于闪避和格挡等动作来说,瞬间反应非常重要。我们在 Switch 版本中增加了格挡的判定时间,使其在响应性上与 PC 版本相当。我们不介意两个版本之间存在机制差异,更关心两个平台的玩家都能有合适、流畅的游戏体验。

  3. 动画混合时间(Blend Time)
    较短的混合时间会让动画的响应感更强,尤其是在攻击动作中。较长的混合时间需要更高保真度的动画,而且还可能导致动作迟钝和响应不灵敏。因此,在《层层梦境》中,我们尽可能让攻击在动作的启动瞬间立即完成。不过我们仍设计了预期动作、跟随动作和恢复动作,以增强其表现力。在下图中,可以看到角色直接做出了预期动作,这将在保持响应性的同时,仍允许启动帧播放,以确保攻击既具有响应性又真实可信。

  1. 移动响应(Locomotion Response)
    较长的加速时间会增加移动的重量感,但会减少响应性。作为一款低保真度游戏,《层层梦境》的移动几乎没有加速时间,因为我们希望它能够尽可能迅速响应,并且不想在重心转移或方向变化等动画方面投入太多资源。

  2. 玩家输入优先(Favoring player input)
    我们制定了一套输入优先级体系,用以确定玩家输入如何打断其他动作。极低响应时间和高打断能力对于闪避和格挡至关重要。因此,游戏允许玩家通过防御性反应来打断几乎任何动作。这使得战斗既具有挑战性又显得公平,因为玩家可以最大限度地控制他们的防御选项以应对挑战,并根据需要灵活应变。另一方面,攻击动作具有启动和恢复时间,玩家仍然需要有目的地考虑攻击方式。


动画

提到战斗,就不得不谈及动画,因为动画和玩家感受密切相关,下面我将分享一些实践经验。首先是利用动画原则(The Principles of Animation),它来自于上世纪 80 年代迪士尼动画师编写的一本书,书中收录了 30 年代以来的动画作品,并归纳了它们的制作原则。作为项目唯一的动画师,我没有足够的时间来制作具有极高保真度的动画。因此,我借助对动画原理的理解,试图在不提高保真度的情况下,创造出更高质感的动画效果。我将从非常高的维度来说明这个部分,并介绍在资产创建中最为重要的元素。

  1. 预期动作(Anticipation)和跟随动作(Follow through)
    它们是传达物体重量的两个最重要原则,将使战斗动画具有极强质感。这些原则有助于让动作展现出直观的时间感,因为它们遵循更加真实的物理规律。如图所示,角色动作非常夸张,但正是这种夸张的动画元素使动作更加真实可信和富有力量。

  1. 附属动作(Secondary action)和重叠动作(Overlapping action)
    我们使用附属动作和重叠动作来提高动画的真实感和保真度。适当运用重叠动作的动画会让人感觉质量更高。人眼非常擅长凭直觉捕捉到自然动作中的差异,而战斗中最明显的问题之一就是动画中有太多元素完全同步,这会让人感觉不自然、僵硬和机械化。提高动画保真度的一个简单有效的方法是为角色添加拖尾元素,比如围巾、爪子和头发。我们为主角卡西迪添加了一条飘逸的围巾,而模拟其飘逸的状态带来了很好的附属动作效果,且没有增加游戏规模。

  2. 缓入(Slow in)和缓出(Slow out)
    缓入和缓出原则通过提供更真实的动力和惯性来增强动画的可信度。请记得,人眼对动作非常敏感,缓入和缓出对于传达动作的真实重量至关重要。

  3. 夸张(Exaggeration)和强烈的姿势(Strong posing)
    动作需要比预期设定更加夸张,尤其是在较小的屏幕尺寸下。如果捕捉到的姿势很夸张,那么就可以在保真度方面有所妥协。在快节奏战斗中,玩家尤其需要能够快速捕捉到动作,而这些动作往往会被受击效果和屏幕抖动等因素掩盖。因此,夸张的姿势会更加突出,让玩家一眼就能看明白。

我强烈建议不太熟悉这些概念的人去了解一下“动画的 12 项基本原则(The Twelve Basic Principles of Animation)”。动画是以战斗为重点的独立开发者需要花费大量时间的领域,因为战斗质量将取决于动画质量。这些原则适用于各种保真度的动画,无论你是设计师还是工程师,了解为什么某些东西有效或无效,有助于使团队在理解“什么能构成出色的战斗感”上达成一致。

为攻击增加上述四组设计有助于让动作更连贯,接下来我们将讨论其他帮助玩家提升攻击感受的方法。需要注意的是,在动画中嵌入一定数量的平移将使附加的程序化平移更加自然。如果玩家发起攻击时没有朝目标移动,他们很有可能无法击中目标。这种失误可能是玩家的问题,但通常会导致他们对战斗系统感到沮丧,因为系统输出与他们的意图并不相符。

如果你在开发单机游戏或创建敌人 AI,那么需要以不同于玩家动画的方式设计敌人动画。对于玩家,我们的目标是使他们的动作输出尽可能令人满意。而对于敌人,则是使它们的动作输出尽可能被玩家理解。这引导我们思考如何以非语言的提示(Telegraphing)传达敌人意图。它并不一定意味着冗长的攻击动画,而是清晰的攻击动画。它使得玩家能够读懂并学习敌人的攻击模式。

  1. 清晰的姿势(Clear Poses)
    这是传递特征的有效方式。夸张的姿势会在玩家心目中留下深刻印象,帮助他们记住攻击的意图、优先级和时机。

  2. 强烈的预期动作(Strong Anticipation)
    它再次利用了之前谈到的动画原则。仅仅提供攻击的启动帧是不够的,需要遵循更高难度的自然物理运动机制。这可以用于颠覆玩家预期,通过速度和时机的变化来迷惑玩家。如果你玩过《艾尔登法环》(Elden Ring),就能体会到其效果。

  3. 声音提示(Sound Design)
    攻击前的声音提示非常关键,它能为玩家提供另一种摸清战斗规律的方式。在面对屏幕外和被遮挡的敌人时,声音提示尤为重要。

  4. 视觉效果(Visual Effects)
    可作为战斗动画的补充,但需要谨慎设计,以免屏幕上过多的视觉干扰降低战斗的可读性。

  5. 适当的层次结构(Proper Hierarchy)
    如果屏幕上有三种敌人,同时发动三种攻击,那么玩家需要清楚哪个敌人最具威胁。虽然这可能非常有挑战性,但有助于玩家确定进攻的优先顺序。

在《层层梦境》中,我们运用非语言提示确保玩家能够获得所需信息,以便在战斗中做出明智选择,采取有目的的行动。这有助于保持战斗的公平性,因为玩家会意识到他们已经掌握了避免错误所需的信息。

最后是敌人恢复时间(Recovery Time)。将敌人恢复时间嵌入动画中会使其更加自然流畅。清晰的恢复动作可以帮助玩家判断,在敌人能够再次发动攻击之前,自己还有多少时间。


受击反应

让我们深入探讨《层层梦境》中创建极具满足感的受击反应的方法,就像在设计部分所讨论的那样,受击反应对打磨战斗至关重要。

  1. 即时反应(Instant Reaction)
    避免混合反应动画。我们发现,如果在攻击命中时立即给出反应,效果会更加强烈。玩家会在脑海中填补前一状态和受击状态之间的空白,从而创造出非常强烈的冲击感。当然,这种方法在低保真度下效果最佳。由于采用远距离摄影机,我们需要通过动作之间的明显变化来强调攻击效果。近距离摄影机可能需要采取更温和的方法,以便通过一定程度的混合来避免呈现效果过于生硬或不自然。

  2. 夸张的姿势(Exaggerated poses)
    我们选择立即播放受击反应,这可以确保玩家真正感受到前一状态和受击状态之间的差异,而无需进行混合,因为击打本身会在敌人的前一状态和当前状态之间形成自然过渡。如果没有足够资源或时间来制作正面、背面和侧面的反应动画,你会惊讶地发现能省去不少工作,在命中瞬间让敌人转向玩家,会让受击反应效果比想象中更为自然。

  3. 受击反应传达力度(Hit reactions sell strength)
    这一点似乎很明显,但需要注意的是,玩家对其动作力度的感知会随着冲击规模变化。一记有力的直拳可能会让敌人晕头转向,也可能把他们击飞至 30 英尺外。我们利用受击反应来传达不同力度的攻击力。

  4. 不同敌人适用不同反应(One Size Doesn't Fit All)
    小型敌人遭受直拳攻击可能会被击飞,但大型敌人可能只是稍微失去平衡。这再次说明要用逼真的运动物理机制来传达重量和冲击感。

  5. 多样性促进互动性(Variety Sells Interactivity)
    为了实现动态交互这一支柱,需要引入多样性。我们发现,当敌人对攻击有不同反应时,玩家会感觉整个系统更具响应性和互动性,而且更有趣。

如何创建无形的引导之手以协助玩家,从而确保系统输出尽可能反映他们的意图?

  1. 辅助瞄准(Aim Assist)
    《层层梦境》使用了近战和远程两种辅助瞄准模式。这是为了在保持游戏挑战性的同时奖励玩家。如果玩家想攻击敌人但略微偏离目标,我们会进行矫正,这让命中目标的感觉更好,更有趣。在许多游戏中,近战辅助瞄准不仅会让玩家转向以对准敌人,还会使玩家位移。

我们相当慷慨地设计了辅助瞄准,为玩家瞄准目标提供了很大回旋余地。为了实现无障碍性,我强烈建议开发者允许玩家自行配置辅助瞄准功能。许多玩家可能喜欢或需要更强力的辅助瞄准来享受游戏。

  1. 磁力(Magnetism)与命中冲击(Hit Impulse)
    磁力在动作游戏中非常常见。在攻击启动阶段,玩家会自动移动到可攻击范围内,以确保攻击命中。你可以在《漫威蜘蛛侠》(Marvel's Spider-Man)、《蝙蝠侠:阿卡姆》(Batman: Arkham)系列和《中土世界:魔多之影》(Middle-earth: Shadow of Mordor)等游戏中看到对磁力效果的极致运用。然而在《层层梦境》中,由于“有目的的行动“这一支柱,我们希望玩家在战斗时更加谨慎地考虑走位。因此,我们没有使用磁力让玩家直接吸附到敌人身上,而是采用了一种基于数据的命中平移系统,根据每次攻击的情况进行调整。

    我们根据受击反应的自然运动,让敌人在被攻击后朝向玩家或远离玩家平移指定的单位距离。这一做法有两个目的,首先是在不需要额外制作不同距离受击反应动画的情况下,增加或减少每次命中的冲击力。其次(也是主要目的),是为了将敌人设置在适当距离,以便玩家能够进行干净利落的后续连击。这种方式对于保持玩家意图与结果一致非常重要,同时又不会牺牲太多我们想提供的核心体验。
  1. 输入缓冲(Input Buffering)
    《层层梦境》的输入窗口非常宽松,玩家有相当长时间在攻击或闪避中进行连击。我们会及早记录输入,并在系统准备好时将其缓存到下一个动作中,这样玩家就不会觉得他们的输入被漏掉了。另一方面,我们也会注意确保玩家的频繁输入不会被过度记录,因为这也可能导致他们对游戏系统不满。

  2. 宽松的命中判定范围(Generous Hitboxes)
    我们通过修改命中判定范围和伤害范围等多种有利于玩家的方式来提供辅助。

上图中,玩家甚至没有真正命中敌人,但依然造成了伤害,因为我们优先考虑玩家感受而非保真度。因此,我们给敌人设计的命中范围很精确,玩家的则非常宽松,除此之外,我们还为单个攻击设计了多个命中范围。例如投射物,我们为敌人碰撞、环境碰撞和可破坏物体碰撞设置了不同范围,以此使敌人碰撞判定对玩家更加宽容,同时确保投射物不会被环境障碍物阻挡,从而提供更愉快的游戏体验。

游戏感受实际上是许多因素的综合结果。这部分我想重点介绍一些可实施的附加元素,它们将在无形中提升游戏感受。这对我们来说尤为重要,因为我们想要满足“强反馈”支柱。

  1. 命中光效(Hit Flash)
    我们为所有与冲击相关的效果添加命中光效,通过瞬间闪烁的鲜明色彩突出被影响的角色,强调冲击的效果。游戏还会同时显示伤害数字。在玩家可接受范围内提供的信息越多,反馈就会越强烈。

  2. 受击反应与命中冲击
    强烈的挥击需要同样极致的反应来凸显效果。此外,我们还加入了之前提到的基于数据的命中平移系统,它可以根据需要加强或减弱命中的力度。

  3. 停格(Hit Stop / Time Dilation)
    停格最早是在格斗游戏中流行起来的,最常见的形式是在攻击命中瞬间,动作凝固几帧。这种形式也被许多单机游戏广泛采用,因为它有助于强调攻击瞬间的重量和力度,并且能够凸显姿势。我们针对玩家攻击采用了一种简单的停格方式:在攻击命中瞬间,攻击者和被击中的角色会定格大约 115 毫秒,相当于 7 帧。我们发现,仅冻结角色,同时允许视觉元素、摄像机以及其他画面细节在此期间继续运行,是干扰最小的方式。此外,我们还采用了自定义曲线,以在停格状态时进行缓入和缓出。早期,我们曾尝试过将一切效果完全定格,但后来发现,处理好停格的进出过渡动画会更加流畅,且不会引起太多干扰。创建停格系统还带来了额外好处,即通过扩展实用性,使其能够即时调整游戏速度。这使我们能够在玩家预判攻击或闪避等情况下实现时间减缓效果。

  4. 命中 VFX
    命中 VFX 是命中体验的关键组成部分,用以呈现相应视觉效果。在增强游戏感受的框架内,关键的考虑因素是命中状态的可视化和攻击本身的关系。通过在攻击类型和风格之间建立自然的联系,使其与相应的视觉反应相匹配,可以增强游戏的响应感,这对于令人满足的游戏感受至关重要。

  5. 屏幕抖动(Screen Shake)和控制器反馈(Controller Feedback)
    另一种常见做法是在攻击和动画中叠加屏幕抖动效果,以增强冲击感和重量感。我们根据受击反应的不同类型(如晕眩、虚脱或倒地)应用不同的屏幕抖动方式。此外,还区分了玩家和敌人的抖动效果,以便更灵活地应用画面抖动。例如,当玩家被敌人击中时,他们很少能够预料到(因为如果预料到,可能已经躲开了攻击),镜头抖动将格外干扰玩家。我们的经验是,应用于玩家的抖动应该远远小于应用于敌人的抖动。此外,力反馈是非常强大的工具,可以将玩家与游戏反应相连接,我们几乎会在所有情况下同时应用屏幕抖动和力反馈。因此,如果你的游戏支持手柄,并且有相当一部分玩家会使用手柄,那么在力反馈方面投入一些时间也是值得的。

  6. 有力的音效(Beefy Audio)
    在战斗中,声音设计通常是影响打击感的未知因素。很多时候,当玩家无法正确表达为什么他们感觉战斗不对劲时,重力和声音设计的缺陷往往是问题所在。因为撞击声和撞击本身之间存在直观联系,缺少音效的刺激会影响整体体验。我们需要注意声音的音量、深度和应用方式,轻巧的声音或没有足够音质的微弱声音会削弱攻击的冲击感。

  7. 程序化的敌人抖动(Procedural Enemy Shake)
    我们不希望玩家能够轻易击倒某些大型敌人,因此,将简单的程序化抖动应用于敌人的根节点(root)或特定骨骼,以增强攻击效果。这一设计考虑的是类似 Boss 的大型敌人,因为它们没有小型敌人那样夸张的受击反应。我们希望给玩家带来更高水平的挑战,所以引入了程序化抖动。这里采用了简化方式,即当特定骨骼受到攻击影响时,会应用具有定向脉冲的程序化抖动。抖动效果应用于敌人的根节点,具体来说是在偏航轴和 X、Y 轴上。这有助于强化玩家的游戏体验:即使敌人没有做出大幅度的受击反应,他们也能感觉到自己对敌人造成了物理影响。

最后,虽然这些增强功能对于提高整体感受非常重要,但应该始终允许一定程度的个性化。至少应该允许玩家关闭这些功能,最好还能根据需求进行调整,尤其是对于控制器反馈和屏幕抖动等。这是确保尽可能多的人都能获得无障碍体验的简单方式。

成功关键

本节将分享一些让项目取得成功的关键因素,以及我们在项目中学到的可沿用经验。


严格控制游戏规模

我们有雄心壮志,但通过其他项目积累的经验能够让我们在一定程度上判断什么在自己的能力范围之外,这是一种相当微妙的平衡。不过我发现最有帮助的是,让自己从心理上和项目保持一定距离,将工作进行一定区隔,并透过更加客观的视角审视功能的规模。也就是说,我试图将个人感情和我对某项功能的价值评判与玩家的价值评判区分开来。

通常情况下,我们会找到在削减规模的同时保留核心功能的方法,但有时不得不做出艰难决定,完全删减某些功能。我在《层层梦境》中花了很多时间设计与角色聊天、送礼提升好感度的功能,它将作为系统层面的程序化小游戏。考虑到游戏的 Roguelike 结构和重复性,我们希望小游戏的游戏性能够补充战斗的游戏性,确保在长时间内使非战斗互动保持新鲜感。最终,我们发现这是一项堪比时间黑洞的复杂任务,给我们的小型团队带来了大量工作。因此,尽管付出了大量时间,我们最终决定彻底删除这个功能,转而采用更简化的聊天系统。这并不是最好的解决方案,但它在一定程度上降低了项目风险。

我们决定将焦点集中在元游戏进程(Meta-progression)上,以保持非战斗系统的吸引力。结果证明这对游戏的各个部分都非常有价值,而且对我们来说也较为可控。通过这一方式,我们实现了在规模内保持非战斗系统吸引力的目标,因为没有被束缚在某个特定解决方案上。


频繁测试和低成本迭代

来自玩家的反馈循环是帮助改进《层层梦境》战斗系统的最重要工作流之一。我们早在项目上线的八个月前就开始广泛收集玩家反馈。例如在项目初期,一位 Alpha 测试玩家向我们发送了一段将游戏速度提升 25% 的视频,他认为这样可能会更有趣。在抛开对工作量的恐慌后,我也认为这看起来更有趣。我们没有直接进行大规模更改,而是希望以尽可能低的成本来验证这个假设。罗伯特在游戏中加入了黑科技,将整个游戏的运行速度提升了 25%,我很肯定这让他的心灵受到了一点摧残,因为打破了很多原有的东西。我们立即向玩家提供了测试版本,并征求他们的意见,大多数反馈都非常积极,团队也认为这是正确方向。于是,我们便按照这个速度调整各个元素,以优化游戏。

开发过程中还有许多类似故事,我要感谢玩家社区为帮助完善游戏所付出的巨大努力。因此,请考虑尽早引入外部观点,并建立允许持续反馈的工作流,以在开发过程中不断迭代。


效率至上

在整个项目中,我的目标始终是尽可能高效地完成工作。由于我需要兼顾多个领域,经常不得不通过非常特定的视角审视工作流程。我一直在寻找能够用最少的时间投入换取最大成果的方法,可以总结为以下三点:

  1. 借鉴他人经验
  2. 融合外部资源,使其成为项目的一部分
  3. 采用注重已有知识和经验的工作流程

许多情况下,我都会先确认是否有人解决过类似问题。例如,《层层梦境》的所有控制器图标都是从资源商店购买的;我还使用了各种 VFX 特效包,以生成特定效果或帮助我学习相关技巧;我们还购买了可复用的道具和其他方面的模型。这些资产很少被整体使用,通常它们更像是学习工具或用来创建新内容的模块。之所以这样做,是为了确保外部资产能够与游戏风格一致。

工具方面,我和罗伯特开发了一个工作流程,利用 UE4 的 Sequencer 系统在战斗中动态生成攻击。Sequencer 是 UE4 的过场动画编辑器,它允许你将各种元素放置在时间轴上,然后在游戏中随时生成和播放这个序列。我们专门改进了它,以便生成与战斗相关的内容。因此,这个工作流程变得非常重要,因为它速度快、可以立即预览,而且只需要很少的代码——这种方法对艺术家更友好。下图是攻击的可视时间轴,这个序列本身是抽象的,可以根据其他的攻击需要进行重新利用和混合。

UE4 的 Sequencer 系统

请记住,如果你遇到难题或不知所措,很可能其他人已经解决了该问题,你可以从他们那里获得解决方案和工作流程方面的经验。


(谨慎地)尝试新技能

我可以应对这个项目中自己从未涉足过的领域,是因为借助了已有技能。项目开始前,我从未接触过角色动画,但我有信心能够胜任,这是因为除了自信以外,我在相关领域有丰富经验。我曾是一名 MG 动画师,并且有 2D 和 3D 动画的工作经验。因此,尽管不了解角色动画,但我有动画基础知识和工具使用经验,这使得转型很顺利。

借助现有技能,不是指局限于自己的专业领域,还要寻找成功扩展舒适区的方法。尤其是当你将它视作一项商业活动时,你会希望通过降低项目风险来最大程度地提高成功几率。


不要受制于完美主义

如果我试图在每个领域都做到最好,《层层梦境》就永远完成不了。对于艺术家和匠人,这听起来有些冒犯,但实际情况是,在一个资源有限的小团队中,试图将所做的每一件事都做到 120 分不仅非常耗费精力,而且不切实际。知道何时该停下来非常重要:对玩家来说,很多情况下的 100 分和我们追求的 120 分一样好,而且获得最后那 10 分或 20 分所需的时间几乎与前 100 分一样多。

在《层层梦境》中,我降低了角色回到空闲状态的动画的优先级,因为绝大多数时候玩家都在不断输入指令,不会等回到空闲状态后再攻击、奔跑或闪避。由于游戏具有高响应性和低保真度,玩家的动作切换会非常迅速。因此,尽管看起来相当粗糙,大部分情况下我还是让 UE4 处理动画切换的过程。这看似是一件小事,但对于项目的保真度来说,制作数百种由攻击回到空闲状态的动画并不合理,省下的动画制作时间可以用于更重要的领域。

习惯不同工作方式的人可能很容易做出这个决定,但对曾就职于大型工作室的我来说,习惯专注于更加狭窄的领域。因此,这是很好的一课,让我明白了什么是“见好就收”,了解什么时候可以“见好就收”的最好方法就是从玩家角度看待它。


珍惜情感投入

在小型团队工作非常有自主性,但也可能导致很多冲突,特别是像我这种固执己见的人。所以在项目过程中,我学会了保护自己的情感能量,这有助于保持心理健康。我在意的事情太多了,甚至包括不该在意的事情,如果你是开发者,很可能也会像我一样。因此,为了重新界定问题,当处理某个特定功能或参与讨论时,我便问自己到底有多在乎这个问题。选择退后一步,将精力投入到最需要的地方,可以保持神清气爽,也有助于缓解我们这种扁平团队中的冲突。我们三人无法达成共识可能会导致决策陷入僵局,但退一步后,我们可以继续进行测试,并在以后重新讨论。

问答环节

Q1:闪避距离、攻击距离等衡量标准是预先设定的,还是在制作过程中不断完善的?

A1:我们厌倦了以往在大型工作室的工作方式,这样的事情大都是凭直觉决定。我们会尝试各种方法,如果某种方法行不通,就会放弃。由于团队只有三个人并且工作效率很高,可以很快测试各种方法。对于闪避距离的衡量标准,我们只在最初决定了一种核心翻滚闪避,以此出发,确定玩家可能使用的其他闪避方式。因为这是一款 Roguelike 游戏,玩家可以习得不同的闪避方式,我们围绕这一点设计了其他闪避方式:有些距离很短,但具有很长的无敌效果,有些距离很长,但冷却时间也较长。总之,我们在这方面比较灵活,不太担心具体指标。


Q2:你们是明确制定了攻击输入发生的帧数(比如所有攻击都是在第五帧命中),还是也采用了上述实验性方式?

A2:这方面同样非常灵活,不过有一些基本规则。我们尽量确保所有的玩家攻击,其速度都快于敌人,因为我们想让玩家感觉能打断敌人,不过并不拘泥于特定帧数。随着时间推移,我们在不同武器上加入了越来越多的攻击方式,然后才开始进行精细化攻击设计。另外,因为这方面的很多工作是由我负责的,所以我可以在脑海中构思出这些想法。如果你在较大团队中工作,情况就不同了,需要与他人沟通。


Q3:在玩家感受方面,你强调玩家影响敌人行动,并中断、击晕或击倒敌人的重要性。当玩家面对类似 Boss 的大型敌人时,需要感觉到他们做出的行动比其他普通行动更重要。然而,不能让玩家完全控制 Boss 或将其置于浮空状态,否则游戏就太容易了。那么,你会采取什么措施来让这种对决和其他战斗一样刺激,甚至更加刺激呢?

A3:首先靠武器库,除了可以使敌人晕眩或虚弱外,玩家还有很多选择,比如魔法攻击,它们有一组可以增强普通攻击的特殊能力。另外在设计 Boss 时,我尝试找出玩家可以在 Boss 行为模式和攻击模式中找到突破点的方式,以便他们感觉可以公平地了解并学习 Boss 的攻击行为,逐渐适应,并有机会进行反击——我们想创造像编排好的舞蹈一样的感觉。有些 Boss 的难度要更高:在战斗不同阶段的攻击间隔会不同,随着难度提升,攻击间隔会变得越来越短,玩家必须逐渐学会在更高难度下进行反击。


Q4:在难度调整方面,行业中非常普遍的解决方案是通过数值提高难度,比如增加敌人的生命值,降低玩家的伤害值等。我不确定《层层梦境》是否采用了这种方式,但你是否曾经考虑过这种方法呢?如果没有的话,是否建议采用其他方式来处理这个问题,而不仅仅依赖于数值调整?

A4:我们采用了混合方法。实际上,用的是一种经典的难度调整方式:为敌人力量和玩家力量设计不同的曲线,并设计敌人生命值和攻击强度的曲线。对于你提到的观点,我的想法是,如果玩家必须随着游戏进行和难度提高而适应变化,游戏将更有趣。因此,在游戏后期,我们提供了难度调整选项,玩家可以用它们来提升不同方面的难度。其中之一是敌人,我们通过引入新攻击模式以及让敌人采取防御性措施,来提升难度和挑战性,而不仅仅是降低玩家的伤害值。这样做增加了游戏规模,但我们希望玩家在高难度下仍然可以保持高度参与,因为他们会看到新的东西,并不断适应新情况。


Q5:你刚刚提到,在更高难度下,会让玩家应对新的攻击方式。那么在设计玩家的应对方式和提升其能力时,是否有一些核心原则?

A5:我们为玩家设计了不同的防御选项,以适应不同的难度级别。玩家拥有格挡、招架和闪避等防御选项,而敌人的攻击可以覆盖其中某个选项,当玩家受到攻击时,头顶会显示攻击类型。随着难度提升,游戏会逐渐禁用某些防御选项。最先被取消的是格挡,敌人可以穿透防御,使玩家只能招架某些攻击;在最高难度下,玩家无法招架并进行反击,只能闪避特定攻击。


Q6:游戏中有大量武器和技能可以混合搭配,它们能够相互影响。那么,你是如何进行数值平衡的?这样可以在保持强度相对平衡的情况下,允许玩家选择不同路线,获得不同的游戏体验。还是说你实际上并没有考虑这个问题?

A6:有考虑到这个问题。我们首先设计了一组早期攻击,并在它们的基础上进行平衡。一旦一组攻击确定下来,在游戏中表现不错且相互平衡,我们就开始在各个方面进行微调。例如,我们可能会设计一种前摇更长,但伤害更高的攻击,然后将其与已设计内容进行比较,在将参数推向极端的过程中,进行取舍。因此,我们尝试以不同方式来调整这些变量,以使玩家在尝试不同武器和技能时感到满意。其次,我们会通过调整一些已经设定好的元素来保持强度平衡,比如恢复时间或启动时间。


原链接:https://www.youtube.com/watch?v=3Omb5exWpd4
*本内容系编译整理,不代表 indienova 立场。未经授权允许,请勿转载。