序列帧动画制作的方法:(这里暂不讨论drawtexture的方法)
1、如果资源是在一张图上,如图:
那么可以使用偏移来播放动画,就是 下图中的offSet参数(当然,在做这些之前,你要导入资源、创建材质球、选择合适的shader等)
知道方向了,那做起来也就方便了
创建一个脚本如下:
using UnityEngine;
using System.Collections;
public class Explosion : MonoBehaviour {
private int x = 0;
private int y = 0;
public float speed = 0.03f;
private float nextFire = 0.0f;
public bool end = false;
public bool rotate;
public float offsetRatio = 0.25f;//这个参数用于调节偏移系数,一排有四个,是1/4;有五个则是1/5;
//下面俩参数表示有多少行列
public int lineX = 4;
public int lineY = 4;
// Update is called once per frame
void LateUpdate ()
{
if(Time.time > nextFire && !end)
{
if (y < lineY)
{
if (x < lineX+1)
{
renderer.material.mainTextureOffset = new Vector2(offsetRatio * x, offsetRatio * y);
x++;
}
if (x == lineX)
{
y++;
x = 0;
}
nextFire = Time.time + speed;
}
if (x == 0 && y == lineY)
{
end = true;
Destroy(gameObject);
}
}
if(rotate)
{
transform.Rotate(2,0,0);
}
}
}
具体已经注释了,不明白的可以看看demo,或者联系我;
2、另一种就是ngui的一个脚本组件:uiSpriteAnimation
首先要导入序列帧、ngui、创建图集如下:
创建图集:
具体实现代码如下:
using UnityEngine;
using System.Collections;
public class effectTest : MonoBehaviour
{
//-------------------------------------------------------------------------
public bool isPlayAnimation = false;
public GameObject sprite;
public GameObject buttonStart;
public GameObject buttonStop;
//-------------------------------------------------------------------------
void Start()
{
UIEventListener.Get(buttonStart).onClick = OnClick;
UIEventListener.Get(buttonStop).onClick = OnClick;
}
//-------------------------------------------------------------------------
//这个是自己想要在结束的时候做一个操作,在ngui的源码中加了个结束的委托,具体的就不多说了,demo会放上去,有兴趣的可以看看
void OnFinish(UISpriteAnimation sender)
{
Debug.LogWarning("finish");
sprite.SetActive(false);
}
//-------------------------------------------------------------------------
void Update()
{
}
//-------------------------------------------------------------------------
void OnClick(GameObject obj)
{
if (obj == buttonStop)
{
Destroy(sprite.GetComponent<UISpriteAnimation>());
sprite.GetComponent<UISprite>().spriteName = sprite.GetComponent<UISprite>().atlas.spriteList[0].name;
sprite.SetActive(false);
}
else if (obj == buttonStart)
{
sprite.SetActive(true);
if (sprite.GetComponent<UISpriteAnimation>()==null)
{
sprite.AddComponent<UISpriteAnimation>();
sprite.GetComponent<UISpriteAnimation>().onFinish += OnFinish;
}
UISpriteAnimation sprite_animation = sprite.GetComponent<UISpriteAnimation>();
sprite_animation.framesPerSecond = 30;
sprite_animation.loop = false;
}
}
}
这个是自己想要在结束的时候做一个操作,在ngui的源码中加了个结束的委托,具体的就不多说了,demo会放上去,有兴趣的可以看看
但是如果序列帧过多的话,不适合做序列帧动画,建议使用视频播放。
(说明:这里用的是unity4.6.1,想要查看的朋友需要使用同版本或更高的版本)这里奉上下载连接:
链接:http://pan.baidu.com/s/1hqu0qdm 密码:cqw22.2补充:
最近在复刻一个demo的时候,有一种情况之前忽略了,就是在不使用插件的情况下(且资源是多个小图片),制作序列帧动画,(当然这里可以使用drawtexture的方法绘制,但是我不想使用这种方法)
在网上查了下,发现momo已经写出了批量创建序列帧动画的小工具,极其方便,这里链接附上,共同学习啦
批量创建序列帧动画,其他的我就不说什么啦
2.3补充:
unity之sprite序列动画(使用unity的sprite editor):
图片是自己在网上下的一张序列帧图片
首先导入一张多序列的图片(带透明通道的),其次,我们需要修改一下sprite的设置:
应用之后,打开sprite editor面板进行sprite的编辑(这里有人会问,怎么打开sprite editor面板呢?看看上一张图的右上角我都用红框框框出来了啦):
接下来,就直接上一张我调好的sprite线框图:
下面是具体怎么制作动画,当然这里有一些步骤是我省略了,(比如:如何创建clip,如何调整帧速率等等,自己探索吧,都是简单的操作)