您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 程序开发 > 开发经验 >
    Unity简单贴图动画应用
    时间:2015-02-25 08:52 来源:互联网 作者:网络 浏览:收藏 挑错 推荐 打印

    Unity简单贴图动画应用


    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来根据时间决定贴图的显示位置,从而实现图片改变的动画效果。

    下面是一个简单的脚本,翻译自wiki :

     

     

     

    //声明整个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之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。