浅谈游戏中的物理设计[1]

发表于2017-02-20
评论1 1.93w浏览

浅谈游戏中的物理设计(1

 曾经听过一句话描述游戏:游戏世界就是真实世界的模拟。在很多游戏设计者进行游戏设计中,往往都会参照真实的世界中已经存在的各种规律,来对应设计游戏世界中的各种场景并进行二者的适配。我觉得,游戏世界本身就是真实世界的另一种延伸和存在的方式,玩家玩游戏的初衷,往往都是想要在虚拟的游戏世界中去获得在真实世界中无法获得或者很难获得的某些心里体验,例如:从高处跳落,随意在空中飞行,挥金如土等等。这些感受,都是建立在真实世界的基础上的,玩家在虚拟的游戏世界中可以无限制地获得和放大这些感受,从而得到满足和愉悦的游戏体验,我相信这也是每一个游戏设计者设计的最大初衷吧!

 

游戏世界中,各种动作和行为,有的是不会出现在真实生活中,例如:闪现,二段跳,遁地等等。有的与真实生活中一致,例如:发射、飞行、奔跑等等。不管是何种动作行为,都是根据已经存在我们身边的基础物理表现,进行仿真或拓展的设计。

所以对于游戏设计者特别是动作物理游戏的设计者来说,对真实世界中物理规律的充分理解,并且结合到游戏设计的具体需求中去,是非常重要的技能,因为这样的话,无论什么样的游戏,都会带给玩家“真实”的感觉。本文中,就先以一种具体的物理行为:抛物和碰撞,和大家聊一聊。后面还会发文介绍其他的物理行为的设计,希望大家可以支持,并多多沟通互相学习。

 

抛物和碰撞

 

抛物和碰撞,这应该是属于游戏世界中最常见的一种物理行为了,所谓抛物:指的是物体受力后以一定速度抛射出去,在空中仅受重力(有时还会考虑阻力)作用的过程。

在游戏世界中,子弹的发射、物体的投掷等行为,都为抛物。但是注意一些导弹或者火箭炮的发射飞行,并不能完全属于抛物的行为,因为会有一个尾部喷射的持续助力的过程,情况会相对复杂一些。

抛物之后,就必然会涉及到“碰撞”,所谓碰撞:指的是物体A以一定的速度和质量,在一定角度与具有一定速度和质量的物体B发生碰撞,从而产生二者运动状态的同时改变。

有很多小型游戏和球类游戏,就仅仅以这2个物理行为来进行设计,并获得玩家的喜爱。相比其中最著名的应该算是《愤怒的小鸟》了吧,纯粹就是属于一个简单的物理游戏,再搭配着具有鲜明特性的卡通形象,风靡全球。

虽然现在例如Unity或者其他更高级的游戏引擎,具有自己的一整套物理模拟的系统,只需要配置对应的“质量”“速度”等具体参数,自动计算产生物理行为,但是呢,作为游戏的设计者,充分了解透彻这些行为背后的真正物理计算过程,肯定是会对游戏的设计有好处的。

之所以会拿出《愤怒的小鸟》来进行举例说明,是因为这款游戏只是在一个二维平面上进行模拟和计算,所有的复杂过程都被简化了,试想:如果全3D的《愤怒与小鸟》游戏,那么在计算抛物碰撞的时候,还需要考虑到前后左右的方向,以及碰撞时候的角度和面积产生的效果都是不相同的。对应的计算过程,也就会复杂得多了。

二维平面,其实仅仅需要将游戏界面分为XY轴即可。

在《愤怒的小鸟》中,我们可以简单的将游戏过程拆分为两个部分:抛物部分和碰撞部分。游戏过程可以概括为:通过玩家合理选择抛物的角度和力度,让小鸟飞翔到目标,产生最大的碰撞效果,从而获得更多的游戏得分。

------------------------------------------------------------------------------------------------------

抛物过程:

也就是玩家的“蓄力弹射”过程,可以简单地将这个过程拆分为三个变量:

1.弹射角度:α

2.弹射力度:F1(初始速度)

3.小鸟质量:M1

只要合理设计这3个变量,控制好它们之间互相影响的关系,那么就完成了抛物过程的设计了。

其中弹射角度和弹射力度通过滑动弹弓实现固定范围内的改变,小鸟的质量通过不同关卡提供的不同小鸟角色来实现,有的大鸟计算的质量大,小鸟计算的质量小,当然效果也不会相同。

其中,“弹射角度”显而易见,控制一个弹射出去的飞行初始方向,角度设计一个合理的区间即可。但是需要注意的一点是:弹射的角度的选择区间,配合着不同初始速度,与目标的距离相关,所以在设计弹射的角度区间的时候,需要考虑设计放置目标的距离,来设计弹弓的弹射角度。示意图如下(简单手绘,大家将就看吧)

其中所谓“弹射力度”仅仅是展现给玩家的一个效果而已,游戏在此处的实际控制量应该是“初始速度”,也就是弹弓可拉伸的范围,表示小鸟获得初始速度值的范围区间,在《愤怒的小鸟》实际的处理结果中,并没有按照“范围”来处理,而是直接简化成一个值(也就是说,弹弓只有一个发射的弹力具体值)。游戏在处理的时候,要控制一点:质量越大的鸟,初始速度越小;质量越小的鸟,初始速度越大。这样处理的结果就能然玩家有一个感受:笨重的鸟,要想飞得远,那就需要将角度调节刚刚好,而瘦小的鸟只需要适度调节角度即可。达到了一个提高真实度的目的。

注:弹力为固定,初始速度的大小,与小鸟的质量有关

小鸟的质量,则可以通过不同大小的小鸟形象进行区分。在游戏中也可以看到,大块头的小鸟形象表示大质量的物体,瘦小的小鸟形象表示小质量的物体。并且他们的质量不同,大小也不同。

确定了上述的3个参数,则可以产生了抛物的过程。(接下来的计算过程中,会用到上面的三个参数)

完成弹射后,小鸟获得了3个属性:

初始角度α、初始速度V0、质量M1.

这三个属性决定了小鸟的另外几个属性:

1.飞行轨迹

2.碰撞时携带的动量

这两个属性决定了后面的碰撞过程,其中飞行轨迹决定了碰撞发生的位置(或者是否会产生碰撞),携带的动量决定了碰撞发生的具体效果。

弹射之后,小鸟就进入了抛物线的过程中,如下图所示:

全程只计算重力(如果增加新的玩法,比如恶劣天气刮风下雨,则需考虑空气阻力),则小鸟在水平方向做匀速运动,在垂直方向做匀变速运动。

由此可得:

水平方向位移=V0*COSα*时间T

垂直方向位移=V0*SINα*时间T-0.5*g*时间T^2

从而得出了小鸟的实际抛物线图像,通过VBA输入函数和数据计算,可绘制小鸟的抛物线图像。

输入三个主要参数:


执行VBA代码,绘制产生抛物线的函数图像。

代码如下:(我会在附件中上传调试用的EXCEL文件,感兴趣的朋友可以下载)

随便输入上图的一组数据,产生的抛物线图像如下图:

抛物线的具体形状不重要,主要是根据抛物线的轨迹,我们可以定位到几个关键点:

1.飞行的最高点

2.降落的地点

根据这两个关键点的具体位置参数,我们可以通过不断调试数据,设计目标点的几个参数:

1.目标点距离起点的中心距离

2.目标点的高度和形状

可以通过对EXCEL图表固定XY轴的坐标值,在相同的坐标系下面调整不同的基础参数,可以得到同样游戏地图下面不同的抛物线轨迹,仅仅弹射角度不同时,随意数据如下图所示:


    当然,也可以控制其他相同,质量不同来进行调试,也就是控制变量法。这样就可以清晰的根据我们的设计需求,获得所有参数的精准范围了。

通过调试数据(初始角度α范围、初始速度V0范围),可以详细地分析出应该选择什么样的角度范围,多大的初始速度,小鸟会在什么地方撞击到多大的目标的什么部位。这些数据都可以被量化并且直观地看出来了。

注意:在上文中已经说过了,保证弹弓弹射力的固定,小鸟初始速度的大小是由小鸟的质量决定的,质量越大初始速度越小,质量越小初始速度越大。

然后,在保证初始角度α范围和目标物设计不变的前提下,设计一个质量M1与初始速度V0范围之间的函数关系V0(m)即可,这个函数关系的作用就是上文中所说的,为反比的关系,我们设一个参数K,V0=K/M1,因此达到模拟下列真实的物理行为:

1.同样的弹弓,每次弹射的弹力F值都是固定的

2.在同样的弹力(拉伸长度)的前提下,越大的小鸟初始速度越小,越小的小鸟初始速度越大

同样的,根据上文的物理数值模型,设计者可以设计出各种各样不同质量的小鸟,并精确的设计出他们撞击目标物的位置。

设计完了这个基础的抛物过程,设计者还可以增加各种特殊的属性,增加游戏的玩法和乐趣,比如增加不同小鸟的技能:

1.加速鸟:可以在空中的某个地点进行一次加速,获得一次推力,可以飞的更远。在上述模型的基础下,这个加速的具体值也是很容易设计和计算出来的

2.减速鸟:可以在空中的某个地点瞬间速度减少,减少飞行的距离。

3.爆炸鸟:在空中某个位置,小鸟的发生解体成N个小鸟,每个小鸟的质量都为M1/N。然后产生新的飞行效果

4.等等等等(各种想象设计)

 

-------------------------------------------------------------------------------------------------------------------

碰撞过程:

说完了抛物的过程,接下来就是小鸟碰撞的过程了。在上文中的抛物过程中,通过简单的模拟计算,根据具体数值可以设计出目标点的位置安排、大小形状。

当小鸟按照设计者的预期飞行范围落在目标处,则发生了碰撞,并且通过碰撞不同的物体产生不同的分数奖励,因此在这里的目标物体的放置设计,还与游戏积分和玩家成长关联在了一起(例如高分数的目标,不能放在轻易可以撞到的位置,需要认真设计)

在真实物理学中的碰撞过程中,主要有两个参数变化:

1.       动能

2.       动量

因为动能会有损耗,这个在现实世界中都是很复杂的变化,因此一般在这种体量的游戏中,不会去计算动能的转化过程。我们会根据物体的动量转化来分析和设计碰撞行为(动量守恒)

基础公式:(矢量公式)

M1*V1+M2*V2=M1’*V1’+M2’*V2’

由公式可以看出来,我们要想在碰撞过程中尽量产生一种“真实”的游戏体验,那么不仅仅要设计小鸟的质量,我们对于每个目标物体,也是要设计对应的质量。在这种设计下,就会产生了这样的游戏感受:

1.       玩家用很轻的鸟,可能撞不动很重的目标,用很重的鸟可以撞动很重的目标

2.       小鸟撞击物体后,根据不同目标质量,小鸟可能会反弹,也可能会继续前进

3.       等等

这些都是真实世界的物理反应,如果游戏中实现了尽量的模拟,那么玩家在很多操作过程中就不需要新的学习成本,因为他们会根据已知的世界规律认知,去实现自己的游戏目标和行为,理解逻辑是很简单的。

 

在建立了完整的物理数值模型后,就可以设计各种各样的碰撞目标:

1.       可以撞碎的木板和冰块(但是会对小鸟动量发生改变)

2.       不可撞碎的石头或硬物(但是碰撞后会发生移动,并且和其他物体发生连锁碰撞)

3.       粗糙的平面和光滑的冰面(会加入不同的摩擦系数计算,粗糙的平面上物体很快会停下来)

 

碰撞的过程,也可以在VBA中进行模拟,模拟的主要目的是要得到:

1.       目标物体的质量与设计好的小鸟质量/速度之间的关系

2.       目标物体的摩擦系数合理设置(会对二次/三次碰撞有影响)

 

为了具体仿真度的需求,有的系数可以直接进行简化:例如将所有的摩擦系数使用一个通用值;将目标物体的质量尽量通用,通过多设计不同的形状和位置来控制碰撞。

 

本文仅仅是简单的列举了《愤怒的小鸟》中的一些最简单的物理模型,主要在抛物和碰撞方面,并且还加入了一些自己的小设计。后面我还会发文介绍其他的一些简单物理模型,希望对大家会有一些帮助。

真实的物理规则在游戏世界中无处不在,不可避免,所以每一个游戏设计者都应当充分了解它们,并且会灵活运用它们。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引