unity3d实现序列帧动画

首先准备一个序列帧图片如下的AngryBird:

场景中随便创建一个物体,这里以Cube为例

将图片拖放到Cube上,这样会在Cube的6各面都有3个bird,为了美观显示一个鸟,我们调整材质的Tiling的X = 0.33333,这样就会显示第一个鸟了

下面我们来通过脚本来实现鸟的眨眼和张嘴:

新建一个脚本:Test

代码如下,注释很详细:

 1 //非常重要的是:如果是float类型一定要加上f,千万别省,
 2 
 3     public int rowCount = 1;  //这个序列图有几行,很明显1行
 4     public int colCount = 3;  //这个序列图有几列,很明显3列
 5     public int fps = 3;  //每秒运行几帧,每一帧都换一个图,也就是一秒平均0.333秒换一个图
 6     public bool isLoop = true;  //是否循环播放
 7     
 8     private float curTime  = 0.0f;  //运行了多长时间
 9     private float lastTime  = 0.0f;  //最后运行时间
10     private int curRow = 0;  //运行到了哪一行
11     private int curCol = 0;  //运行到了哪一列
12     private bool isEnd = false;  //是否结束
13 
14     void Start () {
15         //初始化的时候设置,设置纹理缩放,如果我们不调整材质的Tiling的X = 0.3333,可以通过这个设置
16         //"_MainTex":主要的漫反射纹理
17         //"_BumpMap":法线贴图
18         //"_Cube":是反射cubemap(盒子贴图)
19         renderer.material.SetTextureScale("_MainTex", new Vector2(1f / colCount, 1.0f/ rowCount));  
20         //初始化纹理偏移量,后面主要通过设置他来实现动画
21         renderer.material.SetTextureOffset("_MainTex", new Vector2(0, 0));  
22     }
23 
24     void Update () {
25         if (isEnd) {  //默认false
26             return;  
27         }  
28         
29         if (curTime >= lastTime + 1.0f / fps) { //如果运行时间>=运行时间+每帧运行的时间
30             curCol++;  //执行下一列,列加1
31             if (curCol >= colCount) {  //如果执行的列>= 列总数,说明到了末尾
32                 curCol = 0;  //执行第0列
33                 curRow++;  //行加1,看看是否有下一行
34                 if (curRow >= rowCount) {  //如果行>=行总数,说明没有下一行
35                     if (!isLoop) {  //停止循环
36                         isEnd = true;  //结束播放
37                         return;  
38                     }  
39                     curRow = 0;  //行归零,从第一行重新开始
40                 }  
41             }  
42             //设置纹理偏移
43             //如果是材质的话,一张图的长和宽都是1,1 / 图的列数 = 每张图的宽
44             //curCol * 1.0f / colCount : 执行到的列 * 一张图的宽
45             //curRow * 1.0f / rowCount : 同理
46             renderer.material.SetTextureOffset("_MainTex", new Vector2(curCol * 1f / colCount, curRow * 1.0f / rowCount));  
47             lastTime = curTime;  //记录运行时间,用来做判断
48         }  
49         else {  
50             curTime += Time.deltaTime;  //记录运行的时间
51         }  
52     }
代码

原文地址:http://blog.csdn.net/ariel7321/article/details/7760995

原文地址:https://www.cnblogs.com/liyajie/p/AngryBird.html