全文21000+字,参考图&视频140+,建议在PC端阅读,建议配合上一篇数值篇一起食用。
内容量很大,预估阅读时间不确定,建议想认真看完全文的同学分课时阅读,一次看完消化不了。
这半年做了上线项目的武器表现升级,动作、音效、动作品质提升和相关客户端逻辑;去新项目之后又从头看了一遍更底层的东西,包含Control层面的灵敏度、辅助瞄准,制定一些前期美术规范之类的内容,相对来说对武器表现,主要是打击感,有了更全面的认知,这才敢来写这一块的相关内容。
这一篇和数值篇一样,可以理解为是反拆+经验分享,主要目的是帮助大家查漏补缺(提需求的时候翻一遍),或是建立对枪械设计的最基础的认知,以后填问卷的时候除了说“动作僵硬打击感差”,还可以说些更细致的内容。
列举的仅仅是我工作中做过或者拆解过的模块,应该列不全,也不会过于深入,只要正儿八经做过射击的战斗策划应该都能覆盖到,我只是做了一点点浅薄的整理工作,要转发甚至是洗稿都随意,毕竟射击市场卷到现在,大家已经不是在拼有没有,而是做的怎么样了,看手艺的事我还是有信心。
我认为打击感是一种交互的乐趣,核心组成部分是输入(Control)与反馈(camera&character)
反馈有很多种,也许现在是视觉听觉触觉,随着技术的发展还能期待更多的感观刺激。
在主机和PC平台,我们的输入行为都是通过手柄/键鼠这类机械硬件,他们提供的反馈更多是来自于我用的什么样的设备,或是游戏内鼠标/手柄速度的区别,可控空间不大。
但是在手机平台,当玩家最基础的位移和转向都要通过虚拟摇杆来实现的时候,如何用虚拟摇杆还原出主机/PC平台的操作,甚至比主机平台更加跟手,是一切打击感的基础。
全文会以FPP射击手游为主来讲打击感,看完的话应该就能理解为什么大家都说“策划什么都懂一点,什么都搞不明白”。
控制层主要包含两块内容,一块是玩家自己的主动输入,一块是我们利用机制给到玩家的被动补偿,目标都是提供及时、精准、符合预期的反馈,从而强化操控感和打击感。
由于滑屏的采样和帧率挂钩,如果在滑屏过程中出现丢帧,客户端拿到的数据不平滑,滑屏速度的变化也会受到影响,导致转向失控;即使不丢帧,如果直接使用采样到的原始数据,速度变化的幅度也偏大,表现并不会太好。针对这种情况,我们需要取覆盖面更广的采样数据,或是针对单个采样做优化,来实现曲线的平滑变化。
持续滑屏平滑处理:在玩家持续滑屏时,建议用当前帧和上一帧,帧数更高的情况下可以再取一帧,加权处理帧数间的速度变化,这样在丢帧/帧数低的情况下,仍然能够取得相对平滑的数据。
针对首帧的平滑处理:首帧滑屏由于缺少连续滑屏的数据做平滑,会做一个单位时间位移超过X个像素点时,对数据进行缩放的处理,避免首帧速度过快导致镜头失控。当玩家真的有高速滑屏需求时,后面的帧数会迅速跟上速度。(注意这里一定是达到某种高速状态时再来做缩放,核心是避免误触或者数据误差导致失控,而不是让玩玩家低速卡手)
IOS和安卓在系统层都有防误触设计,用于分辨滑屏和点击,这里会导致两个问题:
这里也需要做平滑处理,可以采用上面处理首帧的方式来做限定条件下的缩放,也可以针对IOS,直接不取第一帧的滑屏数据,看项目组对手感灵敏程度是否有强要求。
我们做灵敏度的最终目的是,希望能够让玩家形成肌肉记忆,从而在不同设备上实现无缝切换。
所以我们针对玩家输入数据的单位,并不是像素点,而是需要归一换算至具体的英寸。
所以需要做的是确定一个标准DPI下的体验后,不同机型根据DPI标准做一个比例缩放。
如上图对比可以发现,转动同样的距离,因为镜头内变化更大,FOV50会比FOV90看起来转向的角度更大,所以可以尝试针对场景fov的不同,新增一个缩放控制系数,使玩家在体感上滑动差异不会过大。
当然也可以像CODM一样不做处理,除开玩家设置,改变场景FOV只有举镜行为,那么开镜这种行为单独去设置好玩家不同倍镜的开镜灵敏度,也能实现控制转向的效果。
经过上文的一大堆处理之后,我们拿到了玩家的输入数据,但如何将玩家的输入数据映射成转向度。
曲线的调试需要跟战斗体验挂钩,PVP游戏的转向区间要求就肯定比PVE大,曲线也要朝这个方向调整。
在满足预期转向目标的情况下,覆盖的滑屏速度范围尽可能做大,这样才能实现颗粒度更细的滑屏,避免稍微一起速就进入超速收敛区间的情况。
监测工具:需要在编辑器内做一个调试工具,实时展示当前帧数滑屏距离和对应转向角度、总滑屏距离和转向角度的工具,录屏之后用能够逐帧播放的播放器检验每帧的变化,这个每个项目都有自己的调试工具,我就不截图了
评估工具:我的习惯是用总转向角度和竞品对比,确保整体的转向角度差异不大,针对过程中变速数据,会用excel记录数据做逐帧对比,观察具体的差异点,但最快的评估工具仍然是负责策划的手和脑子,最好的评估工具永远是玩家CE
位移相对于转向来说就不会有这么多的踩坑点,大多数设置市面上都有现成的参考,需要关注的内容主要集中在两块:位移角度和位移距离。
我们在数值篇的时候时候提到,我们向前的速度和向左右后的速度是不一致的,其中简单提过扩大判定区域来帮助玩家前进的设计,这里做一下更细致的说明,左摇杆的区域大概分为以下几块:
浅红色区块:前后左右四方向校正区,玩家在这个角度之内位移,移动方向为标准的前后左右
白色区块:玩家向左前/右前/左后/右后位移的操作区间,这里的映射角度支持支持配置,例如此时留给玩家的物理操作区间为15——75度,可以将游戏内虚拟操作区间也做成15——75度,也可以映射为30——60度/0——75度或其他角度
绿色区块:支持进入跑步状态的触发角度,还可以做更细的奔跑保持角度之类的设计
实现玩家的精细移动,除了位移角度设计外,还需要做细致的位移距离处理,一般的位移距离划分为以下几块:
触发逻辑:按下触发,还是松手触发,二者的感官差距极大,千万要跟程序对齐,例如开镜往往是按下触发,而开火根据武器类型的不同,可以做按下触发和松手触发
优先级逻辑:当多个按钮叠在一起,同时被点击时,优先触发哪一个,这里按钮的层级需要规划,一般来说会把开火作为第一优先级
响应即时性:这里跟局内一般没啥关系,顺带提一下。存在两个坑,一是需要跟服务器交互的按钮响应速度过慢(例如早期版本CODM的大厅),一个是UI动画做的很长导致按钮的生效节点不明确(例如按钮有一个超长时间轮廓闪光)
长按更多的关注点在于,玩家按住期间能够支持的操作,这部分提需求时也需要想明白。
长按期间是否支持转向:这个功能放在开火键/技能键上很好理解,实现一边开火一边瞄准的功能,但是其他按钮,例如跳跃、开镜、下蹲等是否默认开启,是需要增加相关开关做控制的
长按响应即时性:长按触发的按钮,在按下的时刻就能持续响应玩家的操作,这里需要注意的是如何应对中途的打断和打断后的状态,例如玩家按住开火后,子弹打空触发换弹,开火键以怎样的频率去持续校验,从而实现玩家不松手的情况下,换弹完毕后立即开火
这里再提一个有趣的BUG或者机制,CODM的按钮因为组件不同,玩家按住下蹲键,之后将手指拖拽到开镜键上,能够连贯实现下蹲/滑铲开镜的操作;如果我们进一步细化考虑按住某个按钮并且滑屏的情况下,是否能与其他按钮有交互,也许会进一步优化手感。
PC和主机平台因为按键足够多、相互分离且操作便利,加功能会很方便,例如枪械检视、卡壳处理等等。
但手机平台屏幕尺寸有限,玩家可以使用的手指也有限,所以会常见一些功能融合的按钮,这些按钮的逻辑也需要做精细设计并提供开关。
以最常见的一键开镜开火为例,就会面临先开镜再开火,还是开镜的同时开火?开火完毕后松开手指保持开镜,还是自动落镜等问题。
年初在写数值篇的时候,还觉得AA这个东西需要藏着掖着,后来发现其实大家的功能都差不多,想拆随时都拆的出来,甚至已经有了现成的组件。
也是过了半年才明白,做出来是一回事,调好是另一回事,玩家不希望AA太强(APEXM测试/COD19手柄),更不希望AA太弱,我们需要做到的是“让玩家觉得他自己很强”。
吸附定义可以概括为:枪械的准心在某些条件下,自动向目标靠近,辅助玩家射击。
开火吸附由于需要玩家开火,表现没有开镜和磁力这么直观,可以理解为和开镜吸附的逻辑一致,在开火的过程中逐渐把准心向目标身上靠。
目标处理:当准心周围有多个目标时,是否以最近的目标为准;如何解决多个目标重叠时,玩家想打后面那个的问题
判定范围:以胶囊体为生效范围,还是在胶囊体外再增加一个判定框,进入判定框开始吸附;不同距离的判定框是否需要有大小差异;当准心指向胶囊体内部以后,吸附是否持续生效
生效条件:只对敌方人体目标生效,或是同时对召唤物(靶场靶子)也生效;任何时候都生效,开镜时生效,还是玩家有输入甚至输入达到一定阈值时才生效
方向:吸附的方向以人物中轴线为目标,还是以质心为目标,还是以骨骼为目标
时间:吸附是配置固定时间,到时间就结束,还是没有吸附到目标就持续吸附;是否需要根据距离单独配置
速度:吸附的速度是固定的角速度,还是根据不同距离的吸附时间反算出来的插值速度
逃逸:当检测到玩家的滑屏方向和吸附方向不一致时,需要取消吸附,需要考虑玩家是否在对抗吸附、玩家对抗的吸附的滑屏阈值、吸附消失的插值时间这些问题
定义:当玩家操作镜头划过敌方目标时,滑屏灵敏度自动降低,使准心在目标身上停留更久,辅助玩家瞄准。
看上图可以发现,镜头在滑动过敌方目标时,转向灵敏度显著下降(这图确实看着容易头晕)。
阻尼的生效逻辑比较简单,玩家的镜头划过阻尼触发范围时,会乘上相关的阻尼系数(通常小于1),从而使转向速度变慢。
无论是吸附类,亦或是阻尼类,都只是帮助玩家更好的瞄准目标,底线时玩家至少需要把准心放到目标身上。
定义:当玩家开火满足一定条件时,对射出的子弹或是子弹轨迹进行修正,帮助玩家直接命中目标。
APEXM的子弹保底和命运2的子弹偏移都是通过直接修改子弹的落点,来帮助玩家命中目标,不过实现上区别比较大。
守望先锋则是通过直接修改子弹的碰撞体大小,将子弹判定从一条线,变成一个圆柱体(可以理解为毛妹没能量时的柱子和有能量时的柱子),从而让玩家更容易命中目标【这个不保真,听小道消息说这样做的】。
子弹保底是通过计数的形式来实现,当玩家命中目标的判定框N发子弹且没有对目标造成伤害时,N+1发子弹会直接命中敌方目标
关于子弹偏移,小黑盒的这篇文章讲的很清楚,很感谢这个兄弟,这也是我坦诚分享的源动力之一。
简单来说:子弹偏移机制就是围绕着屏幕中心发射多个判定圈,当不同的判定圈与目标碰撞体相接触时,将子弹向碰撞体做不同程度的偏移。
红圈:子弹基础偏移圈,当红圈与敌方目标碰撞盒重叠时,子弹会向红圈内,距离准心最近的碰撞盒位置偏移,协助命中目标,需要支持根据距离的变化,配置不同的偏移角度or偏移距离
黄圈:高伤部位偏移圈,当黄圈与敌方目标高伤害碰撞盒重叠时,会将子弹优先偏移到高伤害的位置,需要支持根据距离的变化,配置不同的偏移角度or偏移距离
设计上很好理解,当玩家瞄的大差不差的时候,系统帮你偏一下, 偏移的程度还可以作为数值直接开放出来。
传闻OW有子弹有两套碰撞判定,一套是针对场景的,打一条射线,一套是针对目标的,打一个带体积的圆柱。
虽然是传闻,但实际上具有明显的可行性,表现可以参考毛妹的柱子,一定是越粗越容易命中目标:
难点是否要为了这个辅助瞄准来做两套碰撞体系,我技术力不够,很难想象出具体的做法,不过确实也算是一种相对优雅的辅助瞄准手段。九游官方平台
如果做一个简单的归类,辅助瞄准是帮助玩家实现更精确的转向,是在优化右侧虚拟摇杆的操作。
那么位移补偿则是帮助玩家实现预期中的位移表现,优化左侧虚拟摇杆及相应位移按钮的操作。
在关卡设计中会有一个标准叫做通行流畅度,监测玩家在这张地图中的移动是否顺畅,会不会感觉粘滞、卡顿。
这一块其实算是关卡策划的专业内容,我不太懂,简单列一些我见过的问题:地面凸起不合规范/未做行走落差处理,没有针对过门做相应的位移辅助,局内障碍物的碰撞速度补偿等。
在项目初期,3C的策划会给一份3C Metrics文档来限定局内关卡的标准,包含人物高度/移速/跳跃高度之类的数据,其中就包括行走落差,指玩家不需要跳跃和攀爬,就可以行走通过的障碍物高度。
所以假设遇到这类具有设计感的负角度台阶/石头,或是在地形比较复杂的情况下尝试跨越90度台阶,都有可能造成一定的误判。这里的建议是场景里的地形长这样,但是相关的碰撞不一定要刷的一模一样,给台阶的碰撞加一个坡度,大家的日子都会好过些。
以这个负角度的台阶为例,如果碰撞真的刷成蓝色和模型一摸一样,大概会出现即使配置了很高的跨越高度,也会人物没法直接走上去,需要点击跳跃的问题。
这个时候如果多刷一个粉红色区块的碰撞,相关的行走和跨越表现就不会出错了。
为了避免关卡场景很空,我们往往会摆一些东西进去,什么桌子椅子箱子,花盆花台栏杆,但这些物件在摆进去的时候就需要考虑到,这个东西是否能让玩家直接走过去/翻过去,根据标准文档来确定尺寸。
我自己有一个比较简单的评估标准,来看某个物体到底应该不应该支持玩家行走通过:
当玩家镜头推平或处于常规角度(爆头线/架枪位)时,出现在镜头中的物体需要翻越通过,没有出现在镜头中的物体需要行走通过。
例如图中的这个探照灯,早期版本是无法直接跨过去的,推动摇杆走到这里会顶住,玩家平视的情况下还看不见这个灯=。=好在后期修掉了这个BUG。
在手游上精确的通过指定路线,对于大盘玩家来说一直是比较麻烦的事,和键盘按下WASD四个键相比,玩家的手指控制能力差异实在是过大了。
这意味着我们需要更宽的街道、更大的门来帮助玩家顺畅通过,但即便做的再大,也会有玩家顶着门框就是不过区,这里提供一种过门辅助的手段:过门吸附。
吸附框的尺寸略大于门,确保玩家在门附近顶着墙的时候能够被吸过去,从而顺利通过窄门;
但这里需要注意的是,吸附框的宽度不宜过宽,最好需要玩家顶墙时再触发,否则玩家无法实现利用门为掩体的peek操作,刚一探头peek,人就直接被吸过去了。
如图所示,玩家的位移方向的移动速度,会拆解成X轴和Y轴的速度来实现,在没有障碍物的情况下,X轴和Y轴的速度都是正常,玩家的移动不会有问题。
但假设玩家的位移朝向不变,此时顶住墙了,X轴提供的速度几乎归零,只有Y轴有速度时,玩家的移速就会偏慢。
而且由于玩家做摇杆指向的不精准,会经常出现玩家认为自己在平行墙面移动,实际上靠墙遇到减速的情况。
(如果还是没有理解这个问题,你可以现在放下手机或者站起来找一面墙,当你和墙面平行移动时,位移速度是正常的,但是当你与墙面夹角45度与墙亲密接触时,你的移动方向依然和墙面平行,但是速度会变慢不少)
当玩家的碰撞体与墙壁/障碍物发生接触,同时玩家的朝向和墙体/障碍物的夹角达到一定阈值条件时,提供一个垂直于障碍物法线方向的距离/速度补偿,帮助玩家快速通过障碍物。
跳跃这里,类似于平台吸附之类的概念可能已经见怪不怪了,这里贴一个《地平线:零之曙光》的分享。
大致流程是通过记录玩家按下跳跃时的原始数据,预测跳跃轨迹,然后小幅调整速度和角度到指定落点。
这一套系统,比起大家目前常用的跳跃距离固定,全靠平台上配吸附盒子强行吸到平台的设计,最大的优势是实现了动画系统的良好表现,再也没有滑步没有脚步悬空,配合Motion Matching的情况下不同跳跃距离能更有更流畅细致的动画表现。
3A厂商的功力就体现在这些小小的细节上,不需要在通过各种手段做后续补偿,而保证玩家一开始的落点就是精准的。
翻越的实现会比较麻烦,涉及到触发距离、触发角度、障碍物高度判断/宽度判断,障碍物上方/后方是否有足量空间,障碍物本身是否可翻,翻越过程中是否能开火/转向等等细节。
绝大多数手游会把跳跃键和翻越键集成为一个按键,在障碍物附近时,需要玩家和障碍物的距离和朝向角度符合标准,按钮才会从跳跃功能替换为翻越功能,如何更好的识别玩家的意图,补偿玩家的操作,主要的落脚点在于人物与障碍物的角度/距离和障碍物的判定上,同时还需要给判断失误的补偿手段。
不过这样做仍然会出现一定量级的误判,如果需要更精细的操作颗粒度,推荐将跳跃和翻越拆开,彻底一劳永逸,否则补偿和补偿取消就是一个面多加水、水多加面的循环往复过程。
一般来说,翻越只有在玩家顶住障碍物时才支持触发(例如PUBG端游早期),但这样的体验会是玩家快速奔跑——顶墙速度归零——播放翻越动画,感受上不连续,所以会额外做一个距离补偿,当玩家所处的位置和障碍物的距离在一定阈值内时,玩家点击跳跃键,此时播放翻越动画同时带一个向前的位移,将玩家吸附到相应的障碍物上完成翻越(如图所示)。
玩家在翻越时,很难像翻越的图示一样完全垂直的面向障碍物,从机制上都会做一定的角度冗余,玩家没有对准障碍物时仍然支持翻越,因为手游的操作精度更低,所以需要放大这个角度的限制。
这里的处理方式很像是上面提到的过门辅助,主要的应用场景是一些很小的窗户(可以理解为没有按照metrics文档的后续补救),在翻越通过某些较小的门窗、偏窄的障碍物,可以放大吸附框(即上图红框),通过吸附校正的形式,帮助玩家更准确的完成翻越。
在做翻越补偿的时候,我们的目标永远是帮助玩家更好的翻过去,但会忽略一个问题:如果玩家此时并不想翻,那么应该怎么处理。
这个时候需要引入翻越取消的机制,常见的有翻越过程中点击跳跃键,跳跃取消翻越,或是跟CODM和PUBGM一样增加一个向后拉摇杆取消翻越。