您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 学习培训 > Unity编程 >
    Unity制作简单的贴图动画
    时间:2015-03-12 09:15 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印


    var frames : Texture[];   //声明一个数组,存放贴图,声明后,在inspector会看到一个frames的数组,数组的长度可以自己填,填1,就代表只有1张图,可以把一张texture拖进去,填2就代表2张,以此类推
    
    var framesPerSecond = 10;  //声明fps,每秒播放几帧,影响动画的速度。
    
    function Update() {
       var index : int = (Time.time * framesPerSecond) % frames.Length;    //数组的索引,根据时间改变,当前时间乘以fps与总帧数取余,就是播放的当前帧,随着update更新
       renderer.material.mainTexture = frames[index];    //渲染这个贴图
    }



    使用:将脚本新建保存,然后建一个cube或者平面,把脚本拖上,然后设置动画的贴图,然后play就可以测试了


    由于Unity 不支持GIF动画贴图,所以目前在Unity里面做动态贴图,有两个办法。


    一种是将图片导入成关键帧图片序列,类似(0,1,2...)然后在用脚本根据时间逐帧加载贴图.


    另一种是将动画里面的关键帧画在一张大图上,然后用OFFSET来根据时间决定贴图的显示位置,从而实现图片改变的动画效果。


    下面是一个简单的脚本:


    //声明整个Texture的分布情况,4行4列,4个动画
    var colCount    : int =  4;
    var rowCount    : int =  4;
    //声明想要播放的动画起始位置
    //比如rowNumber = 0 colNumber = 0  代表红色第一个笑脸
    // rowNumber = 3 colNumber = 0 代表黄色第一个笑脸
    var rowNumber   : int =  0; //从0开始计算
    var colNumber   : int =  0; //从0开始计算
    var totalCells  : int =  4;
    var fps  : int = 10;
    var offset  : Vector2; 
    //更新动画,传递参数给SetSpriteAnimation()
    function Update () { SetSpriteAnimation(colCount,rowCount,rowNumber,colNumber,totalCells,fps);  }
    //设置动画SetSpriteAnimation(贴图总列数,总行数,指定动画起始帧所行号,列号,动画总帧数,帧率)
    function SetSpriteAnimation(colCount : int,rowCount : int,rowNumber : int,colNumber : int,totalCells : int,fps : int){
        // 计算索引
        var index : int = Time.time * fps;
       
        index = index % totalCells;
       
        // 每个单元大小
        var size = Vector2 (1.0 / colCount, 1.0 / rowCount);
       
        // 分割成水平和垂直索引
        var uIndex = index % colCount;
        var vIndex = index / colCount;
    
       
        //颠倒V,让贴图正过来,所见即所得
        offset = Vector2 ((uIndex+colNumber) * size.x, (1.0 - size.y) - (vIndex+rowNumber) * size.y);
       
        renderer.material.SetTextureOffset ("_MainTex", offset);
        renderer.material.SetTextureScale  ("_MainTex", size);
    
    }



    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。