您的位置:首页 > 移动开发 > Unity3D

Unity frameIndex = (int)(timer / (1f / framePerSecond));

2016-04-08 22:41 197 查看

一次性播放的动画

最近学siki老师的打飞机Unity教程,他对动画中帧率的设置很有技巧,不仔细分析思考下还真不好理解。我做下总结。



77行到86行表示如果飞机死了,给一个爆炸动画。

78行的意思是到现在这一帧时,所花费的时间

79行算的是按照设定的帧率,那么目前应到了第几帧,分析一下:

framePerSecond是设定的帧率,表示每秒放几帧,那么1f/framePerSecond就表示一帧需要几秒,或者说每帧需要的时间。

那么79行翻译过来就是:

从动画开始到目前 已花费的总时间/每一帧需要的时间,那么也就等于目前应是第几帧。

拿吃饭做类比,假如我不停的在吃饭,我从开始吃饭到目前 已花费的总时间/我吃一碗饭所需要的时间,那么也就等于我已经吃了几碗饭,或者说我吃到了第几碗饭了。

81行也就是目前第几帧若超过了爆炸动画所需的帧数,则说明爆炸动画已经放完了,则销毁飞机GameObject

84行,否则,则显示一帧图片到飞机GameObject中的sprite中,

一定时间内循环播放的动画

另一个,就是飞机被击中时(beHit),会在一个较短的时间内(0.2s),循环显示两帧图片(正常的图片,被打时的图片),得到一个被打得一颤一颤的效果。关键代码是这个↓,也是在update里运行的。



53行中,hitTimer表示还剩hitTimer这么多时间播放动画,是个倒计时,时间到了就不播放被打得一颤一颤的动画了

54行,resetHitTime表示一定时间内循环播放的动画的这个“一定时间”,resetHitTime=0.2f,就表示要播放被打得一颤一颤的这个动画,播放0.2秒,那么

resetHitTime-hitTimer就表示

预定要播放的时间 - 还剩的时间 = 现已花费(播放)的时间

hitTimer就是从resetHitTime开始,一直减减减到0的嘛,思考一下~

所以又回到的上面的问题了,故

(resetHitTime-hitTimer)/(1f/framePerSecond)就等于按照设定的帧率的话,目前应是第几帧图片了。

然后为了循环播放,和2求余数,因为只有2帧图片,得到0,1,0,1,0,1…循环显示,后面不赘述了(实验室要熄灯啦!!)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: