Unity 3D\2D手机游戏开发:从学习到产品(第4版)
上QQ阅读APP看书,第一时间看更新

1.9 时间和动画

游戏程序的基本形式是一个“循环”,我们经常说游戏跑多少帧,通常是指在一秒内游戏逻辑和画面更新了多少次。比如游戏主循环一秒循环了60次,我们即可说这个游戏跑了60帧。

我们知道动画片是由一张张连续的图片快速播放产生的一种视觉效果,游戏中的动画原理与动画片也是类似的,我们在程序的主循环中每隔一段时间更新一副画面,连续起来就是动画效果了。

动画片的帧数通常是固定的,比如每秒24帧或30帧等。和动画片不同的是,游戏的帧数往往取决于计算机硬件的性能,因此帧数很可能是不稳定的。Unity提供了一个Application.targetFrameRate变量用来设置目标帧数,在手机平台上,通常限制在每秒30帧即可,在PC上,每秒60帧可以取得非常流畅的动画效果,但30帧通常也可以接受。

因为不同系统对帧数可能有不同的限制,设置Application.targetFrameRate也并不是总能取得期望的帧数,最重要的是,当游戏性能不达标时,游戏可能无法达到预期的帧数,也可能会时快时慢(这是需要避免的)。

当游戏在一台性能卓越的计算机上运行,很可能会获得较高的帧数,但在一台较差的机器上运行,帧数也因此会降低,这样,游戏的逻辑和画面在不同硬件上的更新频率会变得不一致,这显然是不能接受的,好在解决这个问题的方法很简单,只要为所有的动画速度参数乘上每帧的间隔时间(帧数越快,该值越小,反之越大),即可使不同帧数下的动画看起来速度相对一致。

Time是Unity提供的一个静态类,用来管理Unity程序中的时间,它提供了一个重要变量Time.deltaTime,即每帧经过的时间。记住,任何和动画效果相关的参数,比如移动速度、旋转速度等,在使用前都需要与该值相乘,才能保证在不同帧数下取得相对一致的动画效果。在本书后面的例子中,我们会经常看到这种使用方法。