Unity的简单贴图动画的应用
2014-10-21 14:49
417 查看
原文地址: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);
}
例子里面的贴图,附件中有。使用这个脚本很简单,只要保存然后贴在一个cube上,然后就可以观看效果了。
//声明一个数组,存放贴图,声明后,在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);
}
例子里面的贴图,附件中有。使用这个脚本很简单,只要保存然后贴在一个cube上,然后就可以观看效果了。
相关文章推荐
- Unity IOC容器的简单应用
- java回调函数的应用,andriod简单2d动画显示!
- iOS动画 过渡/转场动画的简单应用
- CSS3动画简单应用
- Hololens入门之使用Unity开发一个简单的应用
- 简单的GDI贴图应用
- Android属性动画应用超简单代码打造酷炫扇形(卫星),圆形菜单
- Unity 几种比较简单的加载动画
- IOS的几种动画及其简单应用
- 动画的简单应用
- Unity动画系统-将A模型的动画剪辑应用到B模型上
- android studio开发Activity切换动画以及ButterKnife注解简单应用
- Unity链表的应用之蛇形动画
- 如何在Unity5.0 下实现贴图材质的Animation动画功能
- Unity--贴图动画的实现
- Unity--贴图动画的实现
- swiper 3出来了,还有动画,做场景应用更简单了
- 使用Unity制作简单时钟动画
- 在 unity 中使用三种简单的方式实现实时时钟动画
- Android属性动画应用超简单代码打造酷炫扇形(卫星),圆形菜单