Unity的简单贴图动画的应用

来源:互联网 发布:sql server 2008注册码 编辑:程序博客网 时间:2024/05/17 06:41
原文地址: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个动画

varcolCount    :int =  4;

varrowCount    :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);

   

    //分割成水平和垂直索引

    varuIndex = index % colCount;

    varvIndex = 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);

 

}

 

 

 

 

 

例子里面的贴图,附件中有。使用这个脚本很简单,只要保存然后贴在一个cube上,然后就可以观看效果了。

0 0
原创粉丝点击