2022-06-245155次浏览
1评论
56收藏
14点赞
分享
现在的游戏虽然会采用多种视角,但总应该会有一个贯穿始终的主视角,很多类型的游戏都采用一种视角作为主视角,在一些特殊的场合辅助以其他类型的视角。
2D视角,并不表示只使用2D技术的游戏,为了增强表现力,横版过关游戏也会采用3D技术来增加表现力。游戏的主视角,面向玩家的时间最长,是影响玩家游戏交互体验的一个重要因素。
文章主要分3个部分(点击以下链接跳转相应章节):
下面就开始介绍本文重头戏,常用的几种镜头部署方式:固定位置、非固定位置、多焦点。
将人物固定在中央,镜头跟着移动这种方式,是人最容易接受,也是最容易实现的方式。下图是我找的几个固定位置镜头的游戏例子:
不过,由于摄像机是绑定在人物身上,主角的每一次移动,都会带动镜头移动,如果人物“不这么正常地”移动时,将会导致一些问题。
早期的网络游戏,人物移动得不够平滑,走路像是在走格子,人物的前进是一格一格的,摄像机的移动也是一格一格的。此外,人物向前走出一步,但由于网络卡顿,人物位置又会回置,那么摄像机位置也会回置。如此这般频繁出现,会让游戏的镜头体验非常差。
角色的移动速度过快,周围的画面变换会显得晃眼:
《天地创造》是SFC上一款非常经典的ARPG,游戏素质很高,但由于采用固定视角,镜头同步人物角色的移动,这就导致人物在快速跑动时,镜头的移动速度也很快,周围的画面也在快速变换显得晃眼。
正是由于镜头的移动非常影响整体的游戏体验,所以游戏的主角移动的速度不能特别快,以至于限制的游戏的表现,于是游戏开发者使用了一种叫做“平滑插值”的技术来缓解快速移动镜头的不适感。
上图是网上找的一端平滑插值的代码,主要的意思就是——让镜头的移动比主角慢一些,这样可以避免主角的位置频繁移动导致镜头也同时跟着频繁移动。
用下面的图解,大家应该能够很直观地了解“平滑插值”是如何运作的:
可以看到,主角(绿点)的位置非常飘忽,一会往左一会向右,摄像机(红点)无时不刻地跟着主角,但总是慢半拍。
我们把主角和摄像机的移动轨迹单独剥离出来进行对比:
可以很清楚地发现,主角的移动轨迹东扭西歪(这也是实际游戏的情况),但摄像机的移动轨迹却非常平缓。
有很多游戏的主角是”高速移动“的,灵活的主角会不断地冲刺、变向、加减速,如果将摄像机绑在主角身上,镜头也会随之高频率地移动,那将会带来很不好的体验。而加入了平滑插值,中和了这种快速变换,玩家可以很好地体验到游戏角色的灵活高速,同时不会被晃花了眼。
以下几个游戏都应用到了平滑插值,我用黄色十字标记出了画面的中心(也就是镜头的位置),可以很明显地观察到镜头和主角位置关系的变化:
聪明的游戏开发者又尝试了一些其他的镜头移动方式,“为什么镜头一定要完全跟随主角呢?”,于是,以镜头非固定位置方式部署的“盒子模型”诞生了。(“盒子模型”的叫法是本人自创,业界并无此类说法,只是这套机制用“盒子”这个词来描述非常地形象)。
盒子模型这个说法听着很玄乎,但大家看了我介绍完特性之后,应该想起自己其实已经接触过非常多使用“盒子模型”特性的游戏了。下面我就拿FC时代的一款非常经典的游戏《赤色要塞》来分析盒子模型是如何运作的:
《赤色要塞》的盒子模型特性逻辑非常简单,只有两条:
①角色在盒子内移动,镜头静止
②角色试图走出盒子,镜头移动
①特性一:当角色在“盒子”内移动时,镜头静止在原地位置。
黄色的框框是我添加上去的,也就是这个虚拟的“盒子”的边界。
②特性二:当主角企图走出盒子的时候,镜头会被同时往外推。
我们可以清楚地看到,系统允许角色在一个特定的盒子内移动,只有当角色到达盒子边缘时,镜头才会开始移动。这个盒子还被刻意地设置成了中间偏下的位置,因为游戏整体推进进程是往上的(这款游戏是支持双人同屏游戏的,下面文章还会讲到盒子模型是如何在双人模式下运作的,比想象中的要复杂)。
不过,盒子模型相比镜头固定绑定在角色身上,有个致命的缺点,大家可以看下图:
角色在向右移动时,前方视野是严重不足的,很容易遇到这种“转角遇到爱”的情况。游戏开发者似乎也是发现了这个问题,所以敌人被设定成未刷入屏幕内不会开火,稍稍平衡一下这种影响。
尽管如此,“盒子模型”还是一个很优秀的设计,在一些2D平面、2D横板过关、2.5D游戏里面,都有过优秀的表现,极大地提高了玩家的游戏体验。
下面几张图是运用到“盒子模型”的几款优秀的游戏:
值的一提的是上面这款游戏,《光明力量2》使用了一种非常特殊的“双盒子模型”,它界定了两个盒子:
第一个黄色盒子,主角在内部移动时镜头不动,主角试图走出盒子时镜头开始移动,但是,镜头的移动速度追不上主角的移动速度,所以主角可以“走出“黄色盒子”。第二个绿色盒子,才是真正限制主角走出的盒子。
这种”双盒子模型“比较罕见,大家有兴趣可以深入研究研究。
前面我们说的几种情况,都是只有一个”焦点“。一般就来说,一款游戏画面的焦点就是主角,也就是你控制的角色,无论是固定位置、非固定位置,镜头都是以主角的位置为基准。
说得本质一点,单焦点的情况下,只有主角的状态,才能驱动镜头的移动。但是,还会存在多焦点的情况,例如:同屏多个玩家游戏时(任天堂大乱斗等),有多个因素都可以驱动镜头的移动,这种情况应该如何处理呢?
我们可以看下面这款经典PC老游戏《孤胆枪手》:
这个游戏的镜头移动特性有三条:
①镜头中心始终跟随角色和准星连线的中心
②认同跟随不是及时,且有一定的启动阈值
③使用平滑插值移动镜头
鼠标准星、角色移动都能驱动镜头的移动,这就符合了上面所说的“多焦点”的情况:
①角色不动,鼠标准星驱动镜头移动
②鼠标准星不动,角色移动驱动镜头移动
把“准星”、“角色”、“屏幕中心”三个位置相互之间的关系分解如下就是:
角色和准星做连线,屏幕中心对连线做切线,得到交点到屏幕中心的距离X。只要X不等于0,X就会不断减小,也就是说,角色和准星的交点,会无限地往屏幕中心接近,可以称之为“回正”。
回正的运动非常消极,速度相当地慢,到达一定临界值的时候,几乎是每几秒1个像素的速度。尽管很慢,但交点最终还是会回到屏幕中央,有耐性的同学可以回去自己试试观察一下看看。
由于回正的速度相当慢,也可以说是镜头回正的速度也相当慢,这就缓和了角色和准星相互拉扯造成的镜头频繁移动,也可以说这是另外一种形式的平滑插值。
虽然镜头回正的速度很慢,但不表示它可以被任意地拉扯。看上面这个动图,我们把准星和角色强制往右边移动,交点到屏幕中心的距离X被拉到了最大。
按照镜头的自主回正速度是不可能追上的,但系统不允许X被拉过限定值,所以它强制将镜头同步拉了过来,这样就不会出现鼠标准星和角色都走出屏幕外的情况了。
右边的游戏是《迈阿密热线2》,也采用了和《孤胆枪手》类似的机制。不同的时候,《迈阿密热线2》的镜头移动是即时移动的,没有任何的缓冲时间和平滑参数的加入。
对比动图我们可以发现,刻意地用鼠标在人物两边左右拉扯,准星在小范围内的剧烈移动下,《孤胆枪手》的镜头几乎是没有移动的,《迈阿密热线2》的镜头不停地在抖,因为准星的每一次微小的移动,都会驱动镜头移动,所以整体体验比《孤胆枪手》稍逊一筹。
之前介绍到了使用“盒子模型”的《赤色要塞》,那么两个玩家同屏游戏,每个玩家都镜头都移动都有话语权(也就是多焦点的情况),那么在“盒子模型”下,镜头的移动机制是怎样的呢?
其实,就只有两种情况:
①双方协同:两个角色往同一个方向推进,只要有一个角色就可以推动盒子了。
②双方不协同:两个角色企图将盒子朝向相反方向推时,盒子就会停留在原地。
①双方协同:
②双方不协同:
透过现象看本质,我们来看看实现这两个特性的底层机制是如何实现的:
①首先进行一些简化。
②继续简化,把原来的盒子拆开,不需要同时研究横轴和纵轴,只需要研究一个方向轴就行。
从1到2:双人模式下,角色是有可能跑出盒子的,所以我们需要将盒子边界延长。
从2到3:X轴和Y轴的逻辑是一样的,我们只要搞清楚一个轴的逻辑就可以了,这里我们把X轴的边界隐藏只保留Y轴的边界。
③需要检测AB之间的距离,分别为X轴距离和Y轴距离,预设的X轴距离约等于盒子的宽度,Y轴距离约等于盒子的高度。因为角色自己有高宽,所以实际可能会稍微小一些,这里我们姑且认为它们是一样长的。
4、根据上面的处理,我们将问题进行了简化,通过尝试,是通过这两条规则来实现这种机制的:
①规则一:必须保证预设的X轴(或Y轴)小于或等于盒子宽度(或高度),才能推动盒子
②规则二:当AB距离大于或等于最大值时,盒子内的角色可以往内“拖拽”盒子,直到AB距离小于最大值。
①规则一:
必须保证预设的X轴(或Y轴)小于或等于盒子宽度(或高度),才能推动盒子
我更喜欢把这个规则叫做“钩住”规则。这个情况,就有点像B把盒子“钩住”了,不让它离开自己。如果此时A不动,B向下走,盒子也会被A“钩住”,变成B走出了盒子范围。
用抽象图,在这套逻辑运作下,具体会发生什么情况:
如图1:A企图向上移动,但此时AB距离已经超过Y轴最大值,所以盒子不会随着A继续向上移动,A只能自己径直走出了盒子范围。
如图2:此时B也向上移动,此时AB距离小于Y轴最大值,所以盒子和随着A继续向上移动。
如图3:若A往下走,此时AB距离远远小于最小值甚至为0,所以盒子会乖乖地被A推着往下走。
②规则二:
当AB距离大于或等于最大值时,盒子内的角色可以往内“拖拽”盒子,直到AB距离小于最大值。看下面的动图,红、绿两车都在盒子外,绿色试图进入盒子,进入之后,可以向上“拖拽”盒子,然后把队友给卖了:
同样,我们看抽象图,在这套逻辑运作下,具体会发生什么情况:
如图1:接着规则一举出的例子,A留在了盒子外面,此时B往上走,此时盒子也会跟着往上移动。相反,如果此时B往下走,那就违反了规则一,B只能自己径直移出盒子,这就是上面说的“两人不协同”情况。
如图2:盒子和B持续向上移动时,AB之间的距离也持续减少,当AB距离到达小于最大值的临界值时,同时也是A和B都在盒子范围内时,盒子就不会再被B拖拽了,B再向上移动,盒子也不会继续向上了。
这个规则生效的前提是,B必须自己在盒子范围内,所以如图3这种情况,B向上移动是不会让盒子移动的,只有B继续往上走,进入盒子范围内后,才会触发“拖拽”。
总结
执行这两套规则,是为了让A、B两个角色协同作战,减少了镜头的频繁推动,避免了两个角色相互拉扯,更重要的是,单人模式和双人模式采用了两套不一样的“盒子模型”,但镜头的观感相当地一致,我相信当年大家小时候和小伙伴一起联机打这个游戏的时候,不会觉得和自己一个人玩有什么异样。
这套机制的目的和优点在于:
①鼓励协同作战
②镜头的观感和单人模式保持一致
③要求程序的运算量和判断少
现在回头看来,这是一款80年代开发的游戏,只能感叹这个游戏做的真牛逼,规则简洁、明了、有效,对程序要求的运算量和判断也很少,厉害。
👇推荐阅读👇
评论 (1)