这是一本游戏设计方面的好书
转自天:天之虹的博客:http://blog.sina.com.cn/jackiechueng
感谢天之虹的无私奉献
Word版可到本人的资源中下载

第七章响应的测量方法

我所说的响应是指游戏对玩家输入的响应。换句话说是输出部分。当计算机接收到一项输入信号以后,它能以很多种方式处理再以反馈的形式返回给玩家,但总的来说这个处理过程是有着个基础步骤的:

1.         输入信号进入

2.         输入信号经过解释和过滤

3.                  输入信号调整了游戏里某些参数

要测量一个游戏对输入的响应,我们要先察看从输入设备传来的每一个言号是如何映射成游戏里的改变的。这些信号到底调整了哪些参数,它们在一段时间里是如何改变这些参数的?这些参数间又具备着何种关系?

一个输入信号在游戏里有着多种不同的方法可以调整参数。尽管输入设备是一个由塑料和弹簧构成的物理实体,但游戏里的角色就没有这种限制了。输入能映射成角色的位置改变,就如《洛克人》那样。输入能映射成旋转,就像《陨石大战》和《GT赛车》那样,角色向前的冲刺是靠角度旋转来操纵的。又或者是同一种输入能同时映射成旋转和位置上的改变,正如在《杰克和达斯特》、《超级马里奥64》以及《几何战争》里那样,当用摇杆按下一个方向时,旋转和移动会同时发生。

输入还能映射成新实体物件的创建,比如说洛克人用武器发射时会“产生”一个炮弹,又或者像《街头霸王2》里的古力发出一记音速手刀那样。在这些情况里,一项输入能产生一个全新的实体对象,这个对象往往是从另一个角色的位置产生的。该实体通常有着自己的运动特征和运动速度。

对输入的另一种响应是回放一段线性动画,就像《灵魂能力》、《侍魂》和《街头霸王2》那样。当你按下按键后发出一个“招式”。这些招式主要是由专业动画师制作的动画组成的,动画里包含了一些和游戏相关的空间移动。它会在你选择的位置和时机触发,但一经触发后,动画就会以线性序列帧的形式回放,就像是电视里播一段动画那样。动画持续时间可能会很短,但有趣的一点是不同的输入是对应着不同的线性动画的。这种做法能做到像初代的《波斯王子》那样极端,这个游戏只能通过各种线性动画的回放来控制。你执行的输入只是在特定时刻改变当前播放的动画而已,在游戏里你必须用这种艰难而又机械化的方式去控制角色的行动。

输入还能映射成模拟机制中一个或者多个参数的改变。例如在《马里奥赛车DS》里,游戏里每一帧都运行着一个模拟机制,计算着各种赛车的内部模型,包括它们相互间的关系、它们自身的重量、质量、速度、转弯力,以及各自的摩擦系数——也就是赛车接触到的表面对车身作用的摩擦力,以及这种摩擦力对赛车运动时所产生的影响。玩家输入的指令不单能让赛车前进或者转弯,还能影响到摩擦系数,从而改变整个系统的运动体系。当你按下R键进入“漂移”模式时,实际上你改变了环境的摩擦系数。此时摩擦力下降了,让你能更轻松地转弯(换句话说是可以靠漂移而不是抓地转弯了)。

归纳总结以上各种可能性,一项输入信号可以:

■   在每一帧为一个对象设置一个新位置。

■   在每一帧为一个对象设置一个新朝向。

■   对一个模拟对象增加一股动力或者扭转力,让它移动或者旋转。

■   修改一个模拟变量,例如改变一辆车的车胎的重力或者摩擦力。

■   从头到尾播放一段动画,就像格斗游戏中单个招式那样。

■   改变一个循环动画的回放速度

把输入信号关联到具体参数并决定它们在过程中如何调节这些参数,这个处理过程称为映射。不过对实时控制来说还需要一种特别的映射:从输入到动作的映射。

在实时控制的情况里,输入信号会直接或间接地映射成角色的动作。我们能通过前面测量输入的方法去定下一些指标,用这些指标来测量角色的运动。

■   运动类型:线性vs.旋转。角色是线性移动的还是旋转移动的?

■   运动维度:角色在X、Y、Z的哪些维度上运动/旋转?

■   绝对/相对运动:该运动使用的是哪个参考框架?运动是像《陨石大战》那样相对于角色的,还是像《马里奥64》那样相对于摄像机的,抑或是相对于世界里的某个参考点的?

■   位置vs速度/数值:输入调节的是对象的位置、速度,还是特定数值呢?鼠标指针通常映射成位置上的改变,在《光环》里把摇杆柱左压会改变角色转向的速度(往左压一半会转得比较慢,完全压下去会转得很快)。

■   直接/间接控制:输入是直接修改角色还是对模拟机制施加作用力,还是导致别的对象移动或旋转?例如在祖玛里鼠标指针的移动会决定青蛙的朝向。

■   统一/分离程度:输入改变的是游戏中的一个参数还是多个参数?例如在《几何战争》里,左摇杆同时映射着飞船的前冲和旋转。《杰克和达斯特》也做到了这点,用一个摇杆能改变角色的速度和转向。

通过这样分析角色的运动,我们能确切地了解到每一项输入分别映射到哪些参数上。当我们玩过索尼克后,我们能说它是在双平面上移动的。当我们玩过《古惑狼》后能了解到它是在XZ平面上移动的,但也能在Y平面上跳跃和降落,而且还能在Y轴上旋转来改变方向。《战神》里的奎托斯也是以类似的方式运动的。通过了解角色在哪些维度上运动,我们能看出各项输入分别在哪些维度上控制角色的运动,并且知道这些运动是线性的还是旋转的。例如马里奥在水平方向上的运动是靠方向键的左右键控制的,而垂直方向上的运动是靠A键控制的。

上冲、衰退、保持和释放

无论一项输入映射到哪种参数(位置、旋转、动画播放等),参数在一段时间内的变动都会呈现出曲线的态势。描绘这种曲线的其中一种方法是ADSR包络图(Envelope)。ADSR表示上冲(Attack)、衰退(Decay)、保持(Sustain)和释放(Release)。ADSR包络图描绘的是一个参数在一段时间内在四个不同的阶段里的调整变化(如下图7.2)。

团7.2 一张ADSR包络图,一个参数在4个不同阶段的调整变化

这种包络图通常是用来描绘乐器在声音上的调整变化的,例如当你在古他上弹奏一个音符时,弹奏出来的声音可以用上冲、衰退、保持、施放描绘。音符在刚拨下弦时是最大声的,但要用上一点时间才能从无声到发声,这个过程叫做上冲(Attack)。从达到最大音量开始,声音会再次下降,直到到达一个停滞点,这一段叫做衰退。音量稳定下来的一段叫做保持。这段保持期会持续到声音再次开始下降,最终回到无声的状态。最后这个阶段叫做释放。在整段时间里绘制这个图形就像图7.3那样了。

图7.3 当吉他的一根弦拨动起来时的ADSR包络图。

拿这个和管风琴对比,管风琴的声音是从一个恒定的音量开始的,之后以同样的音量播放下去,当按键松开以后几乎是马上就降到没有声音了(如下图7.4)。

团7.4 管风琴的包络图要恒定得多。

ADSR包络图往柱用于调整数字乐器的输出,它们听起来就像现实世界中同样的实体乐器那样。用它们来思考游戏中由特定输入引起的参数调整也是一个很不错的方法,例如我们可以借它来看看《超级马里奧兄弟》中的“移动”输入(如下图7.5)。

回7.5 这张ADSR包络图重现了马里奧的水平移动。

在这张图里,纵轴是马里奥的移动。上冲阶段是马里奥加速到最大速度,然后没有衰退,只要按键按下就一直保持,直到按键松开再经历一段常常的释放期。结果能看出马里奥是在一段时间里逐渐加速的(图7.6)。

图7.6 马里奧从站立不动到逐渐加速。(略)

现在拿马里奧的左右运动和大金刚的比较一下,后者如下图7.7所示。当“跳人”(Jumpman,大金刚里出现的马里奥的前身)移动时,他是没有上冲期和释放期的。摇杆按下的时候他就以恒定的速度往相应的方向移动了(图7.8)。

图7.7 这张ADSR包络图重现了跳人的水平移动。

图7.8 跳人以恒定的速度往输入设备指向的方向移动。(略)

一旦我们了解了游戏里的哪种输入映射了哪些参数后,我们就能测量出一段时间里参数在输入信号进入后的调整变化了,这样就能做出一张类似的ADSR包结图。假定参数的调整是对应于角色的实时运动的,哦们就能归纳总结出玩家基于这个包络图能体验到怎么样的操作感了。

越长的上冲阶段会帯来响应延迟(floaty)且松弛(loose)的感觉。这也不一定是坏事:例如《陨石大战》中的推进器就有着很长的上冲了,玩家大体上还是喜欢这种感受的。长上冲阶段真正可能引起问题的是当游戏看起来在输入后没有任何即时响应时(如下图7.9)。

图7.9 假如控制的对象花了超过100ms才移动(或者一旦玩家有这种感觉),那就会感觉响应迟钝了。

出现这种情况时是很成问题的,因为它削弱了即时响应的感觉了。游戏里可能会马上出现一些细小的改变,但只要玩家没有感知到,游戏在感觉上就是响应迟钝的。像图7.10那样的包络图在起始时有着快速的上冲,但总体上是一个较长的上冲阶段,这样能让人感到响应是即时的,同时也能塑造出松弛的有机感。与这种情况相反的是,较短的上冲阶段会让人感觉紧凑(tight)和响应灵敏(如下图7.11)。

固7.10 即使上冲阶段很长(多于1秒),但在起始时有着明显的响应。

图7.11 较短的上冲阶段会让人感觉紧凑和响应灵敏。

可玩的实例

    你可以通过CH07-1的例子来体验两者的差别。按下“1”键能感受到响应迟钝的情况,按下“2”键能感受到响应灵敏且松弛的情况。

即使有了紧凑且响应灵敏的操作,上冲阶段往往也有着一个非线性的曲线的。换句话说上冲阶段是一条曲线,而非直线。这样能保持流动的有机感,同时提升了即时响应的感受。而另一方面,假如上冲阶段很短,且从0点到最高点是一个更偏线性的过程,那大部分玩家都会觉得操作响应瞬时(twitchy),如下图7.12。到底要不要用这种做法也是取决于你想要的效果的。假如上冲完全是线性且非常短的,那操作就会感觉很僵硬了。

闔7.12 较短且平直的上冲阶段会产生一种突然感。

有趣的是所有这些(响应延迟、响应瞬时、紧凑、松弛)都是同一次操作里的不同感觉,它们只是在包络图上有着细微的区别,在运动的调整变化上有着细微的区别。这种运动可以是直接或者间接的,可以是一股推力或者旋转力。但无论如何,在上冲阶段的改变能改变整个操作感。

上冲和释放阶段往往都是镜像对称的,这就像《超级马里奥兄弟》的水平奔跑那样,当你放开按钮后,马里奥要花同样长的时间去减慢到停下来,这段时间和他从站立加速到最大速度的时间一样。在按钮松开后这种软释放维持了松弛的感觉。如果像《大金刚》那样没有释放期,那感觉就很突然了。

游戏操控中的衰退阶段往往是一种意外情况。有时候游戏设计师会不留神地让输入改变后的运动速度比保持阶段中的速度还要快上一点,这意味着要保持最大速度,你必须不断按下按键。这种情况是设计师不希望的,因为它会累坏了玩家的手。

例如在《反恐精英》的某个早期测试版本里,玩家可以用一种有名的“滑雪”方式移动——通过稍微带角度的侧身,快速按下前进和侧行按键。当以特定角度移动并在侧行和前进间不断切换时,角色的运动中会出现一个衰退阶段,上冲会让最大速度超出保持阶段的速度值(如下图7.13)。

图7.13 在《反恐精英》中的衰退阶段变成了玩家一个利用点。

这让有经验的玩家极大地有机可乘,因为他们能借此更快地移动。这是一个要移除的漏洞,因为它让老手玩家有着压倒性的优势,让玩家能以超出预期的速度来移动。

保持阶段的数值可以看成是一种限制,就像一辆车或者一个角色的最大速度那样。

模拟机制

那这些包络图到底是哪里来的呢?对任何一个游戏来说,要追踪特定一项输入所映射的参数以及它在一段时间里如何调整这些参数是相对容易的。但要弄清哪类系统会导致这种调整变化是很难的。更常见的情况是包络图是由一个模拟机制中多个变量间的关系决定的。

你可以想象一个简单的例子——一个能左右移动的立方盒,它在每个方向上的移动都呈现出下图7.14那样的ADSR包络图。

图7.14 这个立方盒有着平滑有机的移动机能

可玩的实例

    要体验这种情况,你可以打开CH07-1的例子。用A和D键能把立方盒向左向右移动。你可以点击其中一个参数(例如“最大速度”),输入新的值,按下回车来看看包络图有什么样的改变。

现在在每一帧里都有一个加速值作用在立方盒的速度上,让它产生了一个平滑的历时四分一秒的上冲阶段。这是逐渐对立方盒加速的,让它有一种松弛的有机感。结束的时候和上冲期是镜像对称的,在每一帧都会作用一个阻力值,让玩家按键松开后立方盒会慢下来重新停在那里。假如没有这个阻力值,立方盒就会无限地继续移动(你可以在前面例子里把“Drag值”调成0来体验这种情况),最大速度的变量决定了保持阶段的值,这是立方盒在完成上冲阶段后到达的常量运动速度值。

这个简单的测试演示了模拟机制是如何对参数的调整带来差别的,从而能看到模拟机制中的各种改变是如何改变了操作感的。实际情况可能比这要更复杂(我们会在12~17章里看到),但像这样的模拟机制是提作感的甚础构成。模拟机制建立的基础决定了可能产生的操作感。单独一次微调可能会极大地改变了操作感,但整个模拟机制(首先是哪些参数可以调整)的构成决定了我们可以对哪些地方进行调整。

例如让我们来看看《魔界村》、《大金刚》和初版《银河战士》中左右移动的感觉。在这三个游戏里,水平移动的上冲期和释放期都是很短的(如下图7.15)。

图7.15 响应灵敏,但感觉僵硬。

在这种包络图的系统里,压下摇杆或者按下按键会直接改变角色的位置。游戏在每一帧都会检测按键有没有按下,然后对角色当前位置往相应方向增加一个的数量,再把角色放到新的位置上。类似地,当按键松开后,释放期把玩家瞬间停止在当前位置上。这样的结果虽然感觉僵硬,但也让人觉得响应灵敏。在玩家应对一些需要精准定位和准确跳跃的挑战时是很合适的,其他上冲和释放期很短或者甚至没有的机制也有着似的感受,例如鼠标移动时鼠标指针在屏幕的移动。往往玩家会把这种感受归类成响应灵敏。

以这个和《陨石大战》中的“冲剌”机制相比,在这个游戏里按下冲刺键有着一段较长的上冲期(如下图7.16))。在这个例子里,因为游戏里控制着飞船的速度值,游戏不是直接在每一帧里设定飞船的位置,而是不断调整飞船当前的速度值,基于这个值更新飞船的位置。当按下冲刺键后,游戏会往飞船当前朝向的方向提升速度值。结果是飞船的速度值是逐步提升的,是一个有着柔和曲线的上冲期。这是一种不同的模拟机制和游戏感。

图7.16 松弛而又圆滑的感受。

另一种包络图是在输入完全影响到游戏系统前先过滤它,正如在《陨石大战》中飞船左转和右转那样。这时的包络图是像下图7.17那样的。当按下左键时,飞船的朝向会在每帧里改变一定度数。此时是一个细微的上冲值,它表现为输入在触发时只是轻微地改变。在按键按下的最初几毫秒里,飞船朝向的改变是比后面几毫秒的改变要快的。速度值的改变会越来越快。在这种情况下,感受还是响应灵敏的,但会稍微柔和一点。玩家可以轻按按键来作出细微的调整,也可以一直按下它来全速调整。旋转操作就像是对输入信号的过滤那样。这是调整包络图的另一种方法:在输入信号进入时改变它们。

图7.17 在上冲阶段稍微柔化了。

状态改变

模拟机制中另一种有趣的可测量特征是状态的改变。状态是一种人为构造的改变,它用于定义各种输入信号的意义。例如在《超级马里奧兄弟》里,表面上有着三种不同的操作:左走、右走和跳跃,如下图7.18所示,我们能看到不同状态以不同的方式交叠和交互在一起。

图7.18 互相交叠的状态能产生额外的表现力。(略)

马里奥有着“着陆”和“腾空”两种状态。正如模拟机制所支持的,当马里奥处于着落状态或者腾空状态时,他的运动能力(物理特征)也是有可能改变的。当接触地面时,左右键映射到某种附加力上。当马里奥每接触到地面时,左右方向的移动威力会被大幅削减,产生出一种不同的状态。这是通过状态切换来提升敏感度的简单例子。当马里奥腾空时,向左和向右移动是有所不同的,这意味着一种输入能映射到两种不同的行为上,而这两种行为的是取决于角色当前状态的。有趣的是这让系统里出现了额外的灵敏度:当输入在不同状态下映射到不同响应能产生更大的表现力,而这些状态是靠模拟机制本身去改变和维护的。从根本上你只通过一种输入就能得到两套不同的响应了。

这在Tony Hawk系列的游戏里发挥了极大的效果,这个系列的游戏里有着多达6种不同的状态,每一种都对控制器上的每个按键赋予了一个不同的值。如此在每种状态中每个按键都有着不同的意义了。这样相对来说很少量的输入就能映射出极大量的行为了。游戏人为地为角色建立了多种不同的物理扰态,只要这些状态的改变对玩家是清晰的,那它们就能对应于极大量可能的响应了。同样的原理也能运用到格斗游戏里,当角色处于低头、格挡和跳跃状态时,每种输入的意义都是不同的。

仔细察看一个游游所运行模拟机制的类型和健壮性,这样能衍生出有助于比较多个游戏的方法。只要别太疯狂地深入到具体算法里,我们能看出《超级马里奥》的垂直移动是用一个很简单的模拟机制的,而《银河战士》的跳跃是用一套预先确定的位置的。这让《银河战士》的跳跃显得更干净利落,感觉更精准。编录出一个角色可以存在的各种状态也是很有用的。假如一个角色的确有着多种状态,这个数量有着少呢?不同的状态是如何让不同的输入信号能在模拟机制中解释和得到响应呢?

过滤

从输入设备传入的输入信号能具有多种形式,例如布尔值或者是不断改变的浮点值。游戏可以把“原始”的输入直接映射成响应或者映射成一种外力,又或者是模拟机制中的其他调整形式。这种做法是很少见的,因为直接把原始信号映射就会错失了借它来调节游戏感的机会了。更常见的做法是接收到的原始输入信号会经过一层代码过滤,把它变成一个不同的取值范围。大多数输入信号都会经过修饰才映射成响应,即使只是像简单的乘以2或者乘以3,以此来创造更大的外力传到模拟机制里。几乎所有的输入都会以这种方式来调整,这是在系统设计里经常说到的“调整”(Tuning)的大体含义。

例如鼠标指针在任何电脑屏幕上的移动都有着一个控制-显示比。鼠标在桌面上的位置改变会很接近地映射成指针在屏幕上的移动,但在物理移动和虚拟移动间还是存在着一个比率的。假如鼠标在桌面上滑动1英尺能让指针在屏幕上移动2英尺,那控制-显示比就是1:2。在这种情况下,输入的过滤只是一种简单的倍乘。输入信号还可以用除法、加法、自身相乘等方法来过滤。

你还可以对进入的输入信号进行复杂的非线性转换。这在信号重现了一个范围值时尤其合用,例如用摇杆或者控制器输入(此时返回的是两个处于-1.00到1.00的浮点值)。这种做法用到了《侠盗猎车》的驾驶系统里,也用到了其他游戏的类似驾驶的系统里。游戏里没像传统那样把汽车的转向改变都平均分布在整个输入空间里,让汽车有着一个常量的转向比率(方向盘转1度=汽车转2度),而是在摇杆往一个方向压得越远时把转向比率提得越高(如下图7.19)。

图7.19 转向比率随着摇杆离中心的位置越远而改变。(略)

把摇杆从中心稍微往右压一点能产生相当小的转向。这减轻了“响应过快”的感觉,不像《绝路狂飙》或者《GT赛车》那样高难度。通过让玩家很难一下子就转了大弯,整个系统在感觉上是容错率很高的,让玩家能很轻松地做出小拐弯和发夹弯。

从这个层次来说,它不单单在输入信号传到下一步前调整了它,而且是通过进一步解释输入信号来做出了全新的信号。以著名的Konami出品的游戏为例,它们都在寻求一种特定的按键序列。这些游戏的系统里都会检测各种输入信号,看看有没有出现特定的预定义好的输入模式,然后在看到时绐予不同的响应。当一个游戏对输入模式的敏感度达到这种状況时,输入空间也交得更大了。例如格斗游戏中的连招就是这种情况了。《街头霸王2》的Haduken以及《恶魔城:月下夜想曲》中“Dark Metamorphosis”这招都是需要在一段时间里键入固定的输入序列来触发的。类似的是Wiimote里很多游戏的操作都要用上多种姿势的结合。

基本上情况就是在输入和响应间还运行着一个额外的处理过程。输入信号在进入时首先会经过代码的验证,看看信号有没有符合整套定制好的输入模式中的第一部份。假如能识别结果是其一部分,则提前等着看看后面的输入信号有没有符合模式里接下来的部分。通常这是有时间限制的,下一次输入只能在一段很短的时间内完成,否则就需要重新输入序列。基本上这己经对传进来的输入提供了额外的敏感度了。毕竟一整个输入序列本质上不是输入本身带来的信号。这本身并不是一个响应,而是游戏监听着它所接收到的输入信号的额外模式。一旦鉴别出一种模式,则会通过解释层产生出一种特殊类型的信号,传到模拟机制里,再执行相应的响应。这种响应可以是一段动画,可以是对别的元素的改变,也可以是对游戏的模拟机制附加的额外作用力。这种做法能在现今大多数的Wii游戏里看到,只是以复杂和精巧得多的模式出现——当你拿着一个自由甩动的控制器操作时,你会发送出大量的速度数据和指向数据到游戏里,这一大堆近乎疯狂的数据需要通过精妙的算法才能在计算机里感知到。不过无论是街霸里的Haduken还是Wiimote里的长剑挥舞,一个游戏还是随时监听着输入的模式。

通过解释来产生额外敏感度的另一种方法是借助空间分布,无论是通过游戏空间还是输入空间。例如按下A键代表一种意义,按下B键代表一种意义,同时按下AB两键能产生第三种响应。这是类似于输入序列的,不过它监听的不是一系列输入在一段时间里的关联性,而是监听多个输入信号在同一时间的组合。换句话说,它在赋予每一种输入一个单独的意义以外,还为多个输入的组合赋予了意义。这种做法在类似《Tony Hawk's Underground》的一类游戏里极大地运用,游戏里按键和方向的每种组合都映射成不同的一招。显然,这种做法也在早期的游戏里出现了(例如超级马里奥兄弟),当按下B键时会改变左右键的意义(能增加更大的动力)。

在游戏空间中更常看到的另一种方法是借助背景环境来提升敏感度。例如在《生化危机4》里,角色在游戏世界中的位置能改变一项输入的具体意义。站在窗口旁边或者梯子旁边按下A键的意义是完全不同的,这直接一对一地改变了输入的意义。不过背景环境产生的敏感度也不需要做得如此生硬,像《奇异吸引子》这个游戏就不是这样了。《奇异吸引子》只有一种输入,它只是用于激活放置在关卡四周的一系列重力井。这些从井里传来的重力会影响到飞船相对于井的距离(我觉得是遵守了平方反比定律的),这意味着《奇异吸引子》里有着一种流畅且不断改变的基于背景环境的敏感度。按下按键的意义会随着飞船在游戏空间中四处移动而不断改变,让飞船更靠近某些井,更远离另一些。

综上所述,过滤带来的变换既可以是基于空间的,也可以是基于时间的。空间上的变换意味着把一条线性的曲线转为一条指数式的曲线,又或者通过辨别不同组别的输入信号来传递出相应的(新)信号,借此来提高敏感度。基于时间的变换会对一段时间内的输入信号赋予不同的意义,当他们形成固定序列时能产生出不同的新信号。这些都能给我们全新的方法去比较两个游戏:比较它们在输入信号上的转换类型以及往下一个工序传出的结果值。

关系

仔细推敲每一种映射和包络图能让我们最大限度地了解一个游戏的游戏感是如何建立的。要完全解开这个谜题,最后一步是了解一个系统中各个参数的关系。正是这些关系产生了大部分的游戏感。例如在《刺猬素尼克》这个游戏里,重力是有着一个参数的。重力是跳跃时的阻力,这两者共同建立出素尼克里的跳跃感。与此类似地,在赛车游戏中“甩弯”的感觉是靠摩擦力塑造出来的。一旦没有摩擦力,汽车的转向就会感觉很飘,就像在冰面上开车那样。当地面上的摩擦力作用到车胎时,感觉就像车胎在地面上刻痕那样了,这样就很像一辆真车了。多个单独的机制(把一种输入映射成一种响应)在共同协作后才产生了操作的整体感受。

这整个过程就好像图7.20所示。正如图中顶部所看到的,当玩家操纵输入设备时,输入信号进入到系统里。输入设备会从物理操纵产生的各种输入中产生并发送相应的信号到游戏里。原始的输入信号可以直接映射成响应,就像鼠标指针那样,它们也能直接送到模拟机制里。另一种情况是会对输入信号进行过滤,传进来的输入信号会以某种方式转变,再传到模拟机制中或者形成一种响应。模拟机制层重现了游戏的内部模型,这是玩家通过输入来交互的环境。最后会产生游戏对接收到的输入信号(可能是原始的、经过转换的,或者是从模拟机制中传来的)的实际响应。

国7.20 从输入到响应

总的来说,要测量响应就必须了解哪些输入连接到游戏中的哪些参数上。要做到这点,我们必须知道玩家到底能控制多少种不同的东西,游戏里到底有多少种角色。然后我们可以逐一察看游戏里的每一种角色,看看它们的运动维度、运动类型、运动的参考框架,以及运动是直接还是间接的。了解这些情况后,我们能辨别出每一种输入流在一段时间内是如何调整参数的变化的,能用一张ADSR包絡图来量化它。基于这点,我们能尝试去推算出引起该包络图的是哪些系统。这可能是对输入信号直接进行过滤,也可能是在模拟机制上的改变,又或者是两种手段都用上。最后我们需要了解过程中调整了哪些变量,这些变量间的关系,以及它们是如何组成我们鉴别出的包络图的。

输入和响应的灵敏度

在我们之前讨论的所有游戏里,《大金刚》是其中特别有趣的,因为它把敏感度相对较高的输入设备(摇杆是可以沿着水平轴向上返回从-1.00到1.00的浮点值的)映射成敏感度很低的响应。拿它和《超级马里奥兄弟》相比,它用的是敏感度很低的输入设备,但有着很灵敏的响应。

假如我把这些角色在一段时间里移动和跳跃的位置记录下来,那明显能看出马里奧的宽松的移动方式有着更高的表现力(如下图7.21)。

圍7.21 马里奥和跳人在一段时间里的位置:马里奧明显更具表现力。

从这样的对比来看,很明显《超级马里奥兄弟》比《大金刚》有着更富表现力的机制。输入和响应的结合绘制出整个系统在“虚拟敏感度”上的蓝图(如下图7.22)。当然,这只是一个软性测量,不过在比较两个不同游戏的表现力时是很有趣的。

图7.22 不同游戏在输入和响应敏感度上的大致分布。

可玩的实例

    要亲身体验这种感觉,你或以看看CH07-2的例子。你可以在这个例子里通过键盘的1〜4鍵来进行4种不同的操作。

    按下“1”键能让例子开始,此时用WASD来把立方盒四处移动。这些控制有着很低的输入敏感度和响应敏感度。输入敏感度低是因为只有4个按键,每一个只有开关两态。响应敏感度低是因为游戏对每种按键的响应只有两种状态——全速移动或者完全不动。这在虚拟感受上不是很好,显得很僵硬,没有一点流畅度,也没有任何吸引力。在某些场合里这种生硬是必需的(例如初代的塞尔达传说),因为这能造就出更多发自思考,而不是发自本能的感受。就像在《吃豆人》里,游戏为了简化,把所有旋转以及跟方向有关的移动行为都统统去掉了。不过换回到立方盒这个例子里,去掉这些让其虚拟感受不太吸引人。

    按下“2”键能体验低输入敏感度和高响应敏感度。这一次立方盒会有着机地、松弛且平滑地移动。模拟机制会对其逐渐加强作用力,而不是直接改变它的位置,这样的感受更好吧?运动的图线是一条圆滑有机的曲线。

    按下“3”键能体验高输入敏感度和低响应敏感度。在这种组合下,鼠标这种输入设备有着很高的敏感度,但在游戏里几乎没有得到任何响应。整个立方盒就好像一个放大版的指针那样。这是一种自然的映射:鼠标在屏幕上的位置匹配着鼠标在桌面上放置的位置,因此你能很容易感觉到它的位置,能有一种掌控感。但过程也很无聊,不是吗?因为这种映射已经在你多年使用鼠标的过程里根深蒂固了,这个过程没有任何可以掌握的,不需要你去掌握任何的动作转换。它的运动是很快捷且干净利落的,这让立方盒感觉上没有一点重量感、体积感和表现力。

    按下“4”键能体验高输入敏感度和高响应敏感度。此时游戏里是一种很有趣的运动,需要你花一点时间才能掌握。当你一遍又一遍地鞭打木块,直到它击中红点时;当你企图去减慢木块的速度,让它方向反过来时;或者当你要让它按8字形移动时,整个游戏的感觉是很好的。

    以上例子简单展示了输入和响应可以按不同的方式去组合成不同的操作感。这种粗略的方案是可以运用到任何游戏里的。

总结

以下是对响应测量方法的总结:

■   硬性测量

Ø  玩家能控制多少个对象

Ø  每个角色运动的维度、类型和参考框架

Ø  一项输入在一段时间里对特定游戏参数的调整变化所展现的ADSR包络图

■   软性测量

Ø  系统由其自身的输入敏感度和响应敏感度组合而成的整体敏感度

了解引起特定输入感的模拟机制和输入的过滤方式是一种很难的事。假如你想创造出一种有着特定感受的实时控制方式,那弄明白各种模拟机制是如何产生出相应的感受是很有用的,不过要评判一个游戏的操作感,只看它的输出的包络图已经足够了。对玩家来说,底层的模拟机制基本是没多大关系的。真正有关系的是输出,是操作感和操作控制的整体敏感度。

关于响应延迟(floaty)、响应瞬时(twitchy)、紧凑(tight)和松他(loose)

    以下是译者从EA的一个美国朋友那里得来的对这四种感觉的解释:

    Floaty:操作有轻微的延迟,让它们感觉像是在划船那样,响应不是即时发生的。

    Twitchy:响应是即时发生的,这种即时度甚至到了不真实的程度。例如NPC在转向以后瞬间又突然转过来。FPS往往都是让人感觉“Twitchy”的,因为这些游戏各种元素发生得太快,且改变太频繁。

    Tight:操作往往是很好调整过的,感觉就像在控制很棒的跑车那样。响应的灵敏度到达很合理的程度,但也不会显得不真实。

    Loose:Loose是类似的,但对操作赋予了更多的自由度。它们感觉上还有着合适的响应灵敏度,但也不会显得响应过度灵敏。

游戏感:虚拟感觉的游戏设计师指南——第七章 响应的测量方法相关推荐

  1. 游戏感虚拟感觉的游戏设计师_从零到游戏设计师:即使您没有任何经验,如何开始制作视频游戏...

    游戏感虚拟感觉的游戏设计师 by Angela He 通过何安佳 从零到游戏设计师:即使您没有任何经验,如何开始制作视频游戏 (From Zero to Game Designer: how to s ...

  2. 游戏感:虚拟感觉的游戏设计师指南——第六章 输入的测量方法

    这是一本游戏设计方面的好书 转自天:天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 第六章输入的测量方法 ...

  3. 游戏感:虚拟感觉的游戏设计师指南——第十一章 规则的测量方法

    这是一本游戏设计方面的好书 转自天:天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 第十一章规则的测量方法 ...

  4. 游戏感:虚拟感觉的游戏设计师指南——译序和引言

    这是一本游戏设计方面的好书 转自天:天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 译序 笑着说我又奋不顾 ...

  5. 游戏感:虚拟感觉的游戏设计师指南——第一章 定义游戏感

    这是一本游戏设计方面的好书 转自天:天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 第一章定义游戏感 游戏 ...

  6. Java7并发编程指南——第七章:定制并发类

    Java7并发编程指南--第七章:定制并发类 @(并发和IO流) Java7并发编程指南第七章定制并发类 思维导图 项目代码 思维导图 项目代码 GitHub:Java7ConcurrencyCook ...

  7. 游戏感:虚拟感觉的游戏设计师指南——第九章 润色的测量方法

    这是一本游戏设计方面的好书 转自天:天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 第九章润色的测量方法 ...

  8. 游戏感:虚拟感觉的游戏设计师指南——第二章 游戏感与人类感知能力

    这是一本游戏设计方面的好书 转自天:天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 第二章游戏感与人类感知 ...

  9. 游戏感:虚拟感觉的游戏设计师指南——第十三章 超级马里奥兄弟

    这是一本游戏设计方面的好书 转自天:天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 第十三章超级马里奥兄弟 ...

  10. 游戏感:虚拟感觉的游戏设计师指南——第十五章 超级马里奥64

    这是一本游戏设计方面的好书 转自天:天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 第十五章超级马里奥64 ...

最新文章

  1. jQuery效果:隐藏、显示、切换、滑动、淡入淡出、动画
  2. sklearn——CountVectorizer详解
  3. ios php rsa加密解密,php rsa加密解密使用详解
  4. 强化学习(三)---马尔科夫决策过程
  5. 7-36 社交网络图中结点的“重要性”计算 (30 分)(思路加详解)兄弟们PTA乙级题目冲起来
  6. python3 re正则匹配数据获取案例
  7. Reflector:.NET反编译工具及导出CS文件插件
  8. Oracle DB优化-如何看SQL的执行计划+收集表的统计信息
  9. 记录一个SetupFactory使用手册
  10. python微信所有代码_只需7行Python代码玩转微信自动聊天
  11. The essense of the software atchitecture
  12. win10 软路由_「保姆级」万晓博带你用软路由搭建家庭网络中心第1节-准备工作...
  13. Warning: continue targeting switch is equivalent to break. Did you mean to use continue 2? 故障
  14. (转载)如何写论文之标题篇
  15. 最新版HBuilderx + 夜神模拟器 模拟器调试设置
  16. 我的世界java18w50a_我的世界Minecraft Java版 18w21a 发布
  17. 12306 售票网站新版验证码识别对抗
  18. 2020 中科院 CVPR : Context-Aware Attention Network for Image-Text Retrieval
  19. 合天——SQL注入实验二
  20. 神策数据张铎:一文读懂神策私有化部署的架构演进

热门文章

  1. ctfshow 做题 MISC入门 模块 31-40
  2. matlab怎么设置步长,请教matlab中怎么对变步长的数据进行处理
  3. sql函数—Lpad、Rpad
  4. Spark整理:相关名词解释
  5. 【023】水仙花数算法
  6. 信捷用c语言编写梯形图,PLC一键启停编程梯形图实例
  7. uniapp 调用原生插件包含第三方SDK时抛NoClassDefFoundError异常
  8. 游戏服务器架构,配置
  9. 【补遗】- OC学习小窍门及文件操作(归档)
  10. 33个职场进阶资源网站汇总