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…循环显示,后面不赘述了(实验室要熄灯啦!!)
相关文章推荐
- unity源码解析Material
- Disunity_V0.5.0 提取Unity生成的APK资源的后续探索
- [Unity3D]Unity3D游戏开发之使用EasyTouch虚拟摇杆控制人物移动
- Unity删除工程记录
- Unity3D中继承在ios上的UIApplicationDelegate
- [Unity] 协同程序可以在Update或者FixedUpdate中调用。
- Unity3D教程宝典之Shader篇:特别讲 CG函数
- Unity3d 动态加载fbx模型文件
- Unity读取本地图片资源
- [Unity] 官方文档Execution Order of Event Functions
- Unity3d发布webplayer 部署到IIS
- [Unity] 官方文档Coroutines的应用场景
- Unity3d发布webplayer 部署到IIS
- Unity3D 中PlayerPrefs保存或读取数组的方法
- unity3d 状态存储 PlayerPrefs高级用法
- Unity3D游戏开发之数据持久化PlayerPrefs的使用
- unity显示FPS
- Unity3d基于Socket通讯例子
- Unity3D入门Socket初探
- Unity3D的四种坐标系