zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    windows10的子系统linux(wsl)
    关于js的比较
    关于parseInt,很神奇
    vue修改数组元素通过arr[0]=val的方式不生效
    wps表格 VLookUp 函数
    青年大学习_收集截图方案
    个人记录_uwsgi,nginx与django之间的关系以及各自的作用
    Ubuntu16.04系统中创建新用户
    idea 启动或debug springboot web项目特别慢的解决方案
    利用Aop实现动态分库分表
  • 原文地址:https://www.cnblogs.com/liyajie/p/AngryBird.html
Copyright © 2011-2022 走看看