《战神》基于新视角战斗系统的革新

微信图片_20210224092419.jpg

作者:托比亚,会音乐和游戏设计的TA里最帅的那位
本文首发知乎:https://zhuanlan.zhihu.com/p/351783006

最近突然想深入了解下优秀战斗游戏的机制设计思路,因此就把GDC 2019 Santa Monica最新作 ——《战神》的战斗系统talk翻出来看了,分享者是Mihir Sheth。虽然说在与曾参与该作研发的开发者交流中,得知系统实现的复杂度远比GDC那轻描淡写的分享要高得多,但是里头有很多的思路还是很值得借鉴的,故在此留下笔记。

《战神》在这次的革新的设计目标,还是决定在系列的核心体验之上加入第三人称视角,并实现更优秀的体验,由此构成了两个具体的设计目标,分别是:

  • 以新的视角为基础重新构思战斗系统
  • 保留原来《战神》系列的核心标识(identity)
微信图片_20210224092426.JPG

对此,开发者需要先剖析出什么是《战神》的核心标识,大体如下:

  • 连击的gameplay(有趣的敌人被攻击反馈)
  • 威力强大的攻击会往前位移
  • 一打多
  • 容易上手

由于《战神》是个需要一打多并且重视侵略性的游戏体验,玩家在行为原则上就得极具自信与进攻性。但是多数市场上的第三人称动作游戏更强调的是1v1的战斗体验,因此与《战神》想要实现的体验目标是不匹配的。直接生搬硬套到《战神》之上,只会造成极其混乱与差劲的游戏体验。

微信图片_20210224092427.gif
战斗场景异常混乱,体验十分糟糕,玩家完全无法掌握敌人的位置,这里对玩家来说,最大的挑战在于如何快速的调整视角,而不是游戏内容本身


微信图片_20210224092429.JPG
相对于已经成熟的这些背视角游戏基本都是建立在一对一之上,因此并不会造成过多的混乱

因此,开发团队需要让玩家建立起明确的战斗行为顺序,具体如下:

追踪敌人(Tracking Enemies)
锁定敌人(Target Enemies)
攻击敌人(Engaging Enemies)

1. 追踪敌人(Tracking Enemies)

为了让玩家能够很好的track enemy,就要让玩家能轻易地标记哪些敌人是aggressive的。因此团队通过scoring来排序敌人的威胁性,并通过tokens来分配哪些才是玩家应该注意的敌人。每次tokens的分配都会有个固定的分配值,如图中所示。假设该固定值为14个tokens,由于前面三个敌人已经分配完所有的tokens,因此第四位蓝色敌人就会被归类于non-aggressive,从而与玩家保持一定的距离。

微信图片_20210224092430.JPG
通过scoring计算敌人的威胁指数,以用于优先级的排序


微信图片_20210224092431.JPG
由于tokens已经被前三者分配光了,因此蓝色的敌人就会被归类为non-aggressive 敌人

在计算好威胁性之后,符合标准的敌人就会尽可能站在玩家觉得有威胁的位置,而不匹配的敌人则相反。计算上是以深度作为考虑的,目的就是为了让玩家能更方便的看到敌人。


微信图片_20210224092433.JPG
标记敌人是否在屏幕内来作为scoring的其中一个依据

在位置的分配上,开发团队本来是通过weight based position system来寻找敌人的最优位置(optimal positions)的。周遭的节点会随着kratos的位置更新periodically,并且各个节点会根据是否在有效navmesh里自动开关其节点。但是后来制作团队发现整个系统会变得越来越繁复,并且无法debug。而且当敌人离开屏幕之后,玩家就容易陷入胆怯,也无法构建具体的mental map,从而失去自信与进攻性的行为。

微信图片_20210224092434.JPG
围绕着Kratos铺开的weight based position节点,并且间歇性地更新其weight value


微信图片_20210224092435.JPG
开发团队发现debug极其困难,并且玩家体验开始与体验目标相悖,形成了谨慎与胆怯的游戏体验。

迭代了一年之后,开发组改变了方向。他们把寻路方案替换成“Prevent bad positions”。大体做了以下几件事:

1)相比于之前围绕着Kratos找位置,这次则替换成了要让敌人去到玩家视角内的位置。由图可见,标记为aggressive的敌人会站在一个玩家面前一个扇形状的区域内,其角度是根据摄像机的视角宽度及距离来进行计算的。而non-aggressive的敌人则和老《战神》没什么区别,会在最外圈与玩家保持距离。

微信图片_20210224092436.JPG

2)被标记为aggressive的敌人,就会在扇形状的位置选择position constraint,并且有一定半径距离的全来作为seperation constraint,从而形成他们的活动范围。而non-aggressive敌人的seperation constraint则会以玩家为中心计算一定弧度的扇形。这就能让他们在未占用大范围空间为前提下,很好地分散在玩家的周围。

微信图片_20210224092438.JPG

好处就是,系统因此简化了不少,视觉上也更直观,还便于做debug。

但是也带来了不少问题。首先由于position constrait必须建立在玩家前方的扇形区域,因此有很多被标记为aggressive的单位会出现从玩家背后硬是挤到玩家眼前的尴尬景象。而且在屏幕以外的单位依然很难辨别他们的位置,因此还是无法构建有效的mental map。

对此,开发团队的解决方式是:

1.尽可能确保他们的屏幕标识不被改变(on or off screen)
2.尽可能他们呆在同样的区域

打个比方,在屏幕外的敌人就不该冲到玩家眼前的扇形区域内,而是应该一直维持着其屏幕外的状态并且和玩家保持一样的距离,一直到Kratos面向他为止。

除此之外,开发团队还以kratos的视角为中心设置了象限(Quadrants)系统,offscreen的敌人在Kratos面向他们之前,都会尽可能呆在原本的象限之内。

微信图片_20210224092439.JPG

微信图片_20210224092440.gif
标记为aggressive的敌人会尽可能呆在扇形区域内


微信图片_20210224092442.gif
当玩家快速经过aggressive敌人的时候,它们就会被标记为off-screen,也就会被标记为non-agressive了,因此就变成on-screen中距离更近的紫色敌人被标记为agressive了


微信图片_20210224092443.gif
把摄像机转向背面的敌人,敌人还是会处在offscreen状态,并且呆在各自的象限里(Quadrant),分别是站在Kratos右侧的绿色敌人,及站在左边的黄色敌人。


微信图片_20210224092444.gif
当Kratos转向绿色敌人的时候,他才会被标记为on-screen,并计算其威胁值。由于威胁值是periodically计算的,所以aggressiveness的标记也会频繁切换。

该方法不仅有效解决了尴尬的位移,更让玩家明确了mental map,从而建立起自信心并做出开发团队期望的进攻性抉择。

为了构筑aggressive gameplay,开发团队也开始思考如何让玩家意识到off-screen单位的行动。开发团队并不想通过雷达之类等容易造成information overload等问题的non-diegetic ui来抽离玩家对前方的注意力,因此最终的方案是通过spatial的ui箭头设计来环绕kratos的周围并指向对应的敌人,然后通过闪烁颜色来提示敌人的攻击状态。近程攻击是通过红色来提示的,而远程则通过紫色来提示。

微信图片_20210224092446.JPG
开发团队一开始是使用屏幕边缘的亮红色来作为敌人方位的攻击提示,不过最终容易让玩家误解为受到攻击的特效。因此转换为箭头指向敌人的设计。

为了让不怎么使用右摇杆的玩家也能轻易上手,开发团队开发了专门的Strafe Assist,摄像机会获取需要注意的相关敌人的中间位置来作为摄像机需要瞄准的中心点,并自动地横向摆动来瞄准aggressive的敌人,这点在横向躲避的时候尤其明显,摄像机也会自动校准到攻击的朝向。虽然自动校准无法完美地满足所有场景,但是从playtest的结果来看,已经基本能满足大部分玩家的需求了。部分对操作有追求的玩家可以选择关闭Strafe Assist并手动通过右摇杆来旋转视角。

Strafing在游戏中是指玩家横向移动时候,摄像机通过横向摆动自动校准锁定目标的摄像机行为。


微信图片_20210224092447.gif
紫色条估计是玩家在横向移动时候,摄像机校准中心相对于敌人位置的偏移量,而绿色条纹则推测为敌人对摄像机的相关性权重。

2. 锁定敌人(Targeting Enemies)

接下来是Targeting Enemies,其重点是要让玩家可以准确地攻击他想要攻击的目标。

在一个一打多的局面里,准确地选择玩家像攻击的对象是极其困难的事。对开发团队来说,如何让玩家能轻易地执行高进攻性地一大多体验是重中之重,因此合理的攻击选择非常重要。

微信图片_20210224092448.JPG
按下攻击按键的时候,应该优先攻击哪个角色是个十分复杂的问题

旧版的《战神》目标选择机制并不被采纳的原因在于,开发团队想要避免玩家输入向下攻击的时候,Kratos会对着摄像机进行攻击的问题。所以他们首先尝试类似于射击游戏的方式,让Krstos朝向屏幕中心进行攻击,结果却造成玩家无法准确地且轻易地攻击眼前标记为aggressive的敌人,从而造成强烈的沮丧感。


微信图片_20210224092449.JPG
开发团队一开始是想通过类似于射击游戏的体验来设计瞄准机制,不过体验并不好

最终开发团队糅合了2种方案,大体做法如下:

左摇杆闲置的状态下,玩家会优先选择眼前的敌人,并且屏幕外的敌人则不会被选择为攻击对象,右摇杆不会影响选择目标(除非该选择的目标被移动到屏幕外了)

微信图片_20210224092451.JPG

微信图片_20210224092452.JPG
只移动右摇杆的话,视屏中央的角色是不会自动被判定为优先攻击目标的,只有当标记为aggressive的敌人离开屏幕,才会根据视角方向切换目标单位

左摇杆象征着玩家攻击意图,会根据其朝向推测并选择玩家意图攻击的敌人

微信图片_20210224092453.JPG
左摇杆会反映玩家意图攻击的目标

以下是推测玩家近距离攻击意图权重的相关属性:

微信图片_20210224092454.JPG

除此之外,这种过肩式的视角让玩家不能很好地衡量与敌人之间的距离,因此容易挥空。对此,开发团队决定采用老《战神》的”Suck To Target”的攻击方式,大体来说就是设置每个攻击动作的攻击范围、攻击速度及暂停距离,当目标敌人符合条件时候就会直接“吸附”上去进行攻击。

微信图片_20210224092456.gif
玩家不好衡量摄像机的距离

微信图片_20210224092457.JPG
STT(Suck to target)的介绍

不过SST也会带来2个显著的问题:

当玩家在横向移动时候进行攻击时,摄像机会有机率拍摄到横向的攻击动画,从而让玩家感知到刻意吸附的不和谐感。

微信图片_20210224092458.gif

另一个更严重的问题是,在吸附的同时如果敌人离开了吸附的距离导致玩家挥空,也会对玩家造成极其糟糕的游戏体验。

微信图片_20210224092459.gif

对此,开发团队采取通过视线角度来调整吸附距离。当敌人的与视角所呈的角度很大的时候,同时也是玩家比较容易掌握距离的时候,这时就缩短吸附距离来解决刻意吸附的不和谐感。反之则提高吸附距离,来解决玩家深度感知的问题。

微信图片_20210224092501.gif
俯视角观察吸附距离,当视角与敌人角度越大,吸附距离越短;当视角与敌人角度越小,吸附距离越长。

针对于远程攻击的辅助瞄准,开发团队设计了两种机制:

Aim Friction

当准星滑入判定区域的时候,就会增加十字键的摩擦系数从而降低十字键的灵敏度。

微信图片_20210224092502.JPG

Zoom Snapping

当准星在球形区域内按下Zooming键,则会把画面聚焦到该单位身上。

微信图片_20210224092503.JPG

虽然前面有说到《战神》的战斗体验式建立在1打多之上的,而锁定机制更多式建立在单挑的攻守之上,这有悖于预期的目标体验。不过还是有不少测试玩家因为过往的第三人称游戏经验而养成了对锁定机制的依赖,因此开发团队最终还是加入了锁定按键。

微信图片_20210224092505.JPG
开发团队最终还是妥协而加入了锁定按键

锁定按键是以近战的目标选择作为基础的,因此锁定按键会优先选择近战目标选择上优先级最高的敌人。不同于其他同类视角的游戏在于,玩家在进入瞄准模式的时候,系统依然会记得上一个锁定的对象。而当玩家放开瞄准键后,Kratos会重新朝向之前锁定的敌人。其目的在于让玩家能够同时处理2个敌人以尽可能实现1打多的需求。

微信图片_20210224092506.gif
可以看到当玩家放开瞄准键之后,视角会重新朝向之前锁定的敌人

3. 攻击敌人(Engaging Enemies)

接下来说说《战神》攻击敌人的部分。开发团队希望让玩家可以持续并有效地攻击他们的目标,好让玩家可以持续维持高进攻性的行为选择。

以往的《战神》是通过把敌人击退,然后Kratos跟进的位移动画(animation translation)来创造打击反馈,并建立起力量感及破坏力的情感冲击,从而让玩家维持高度自信的进攻性抉择。但是在新《战神》的视角上,这种向前移动的位移动画无疑会造成摄像机的推进,从而影响玩家的可视范围,进而造成玩家因丢失屏幕单位的不安全感。

微信图片_20210224092507.JPG

该视角变化的局限性,使得玩家的防御型行为抉择更加的理所当然,但是对于《战神》来说,这显然是不合适的。

对此,开发团队通过以下三点来解决视角推进造成敌人丢失的问题:

  • 减少敌人被攻击反馈并往后退的位移距离。
  • 减少Kratos进攻时候往前推进的距离(STT已经提供一定程度的侵略性体验,所以并不太影响玩家的进攻反馈)
  • 通过脚本持续迭代程序化缩放调整的位移距离。

虽然解决了视角推进的问题,不过当Kratos因为重攻击而把敌人甩飞的时候,敌人会因为飞出屏幕而被判定为off-screen,因此Kratos就会转为攻击其他on-screen的敌人。最终会因为不能顺利追击从而影响了游戏体验。

微信图片_20210224092508.gif

敌人飞出画面后Kratos会直接转向攻击其他屏幕中的敌人,最终因为无法追击敌人而影响了游戏体验

开发团队的解决方案是添加了Strike Assists机制,大体如下:

永远把攻击中的敌人会尽可能呆在摄像机的朝向,具体做法为敌人受到攻击时会记录敌人的偏移值,再根据视角的方向做插值。

微信图片_20210224092510.gif

击飞敌人时候,会把敌人击向摄像机的朝向,也能进一步保证敌人处在视角之内。

他们还添加了Hit Reaction Collisions,敌人收到攻击时候会生成碰撞体,该碰撞体会同时攻击到邻近的敌人,这样既能保证玩家安全的输出,同时也能进一步增强攻击威力的视觉反馈。

微信图片_20210224092511.gif

为了避免敌人被击飞后Kratos会快速切换目标敌人从而失去追击机会,开发者还添加了Disrupting Enemy Aggression,大体做法如下:

当敌人出于受击状态的时候,不回收aggressive tokens,这样的话玩家就不会因为敌人被击飞而切换其他的敌人。

当敌人滞空被击飞的时候,aggressive token回收的时间会延迟。

微信图片_20210224092512.gif

当敌人的攻击被打断的时候,其他敌人的攻击会被延迟。

微信图片_20210224092514.gif

最后使敌人滞空时候,为了能始终维持滞空的敌人不会轻易飞出屏幕外,开发团队严格控制了敌人的击飞高度。具体做法是:当敌人向上击飞的速率超越设置的float height时,就会额外添加速率来使得敌人会反弹回屏幕内,从而控制了敌人击飞的高度。

微信图片_20210224092515.gif

原视频地址:https://www.gdcvault.com/play/1026085/Evolving-Combat-in-God-of

托比亚

分享到:

评论已关闭