序列幀動畫制作的方法:(這裡暫不讨論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 密碼:cqw2
2.2補充:
最近在複刻一個demo的時候,有一種情況之前忽略了,就是在不使用插件的情況下(且資源是多個小圖檔),制作序列幀動畫,(當然這裡可以使用drawtexture的方法繪制,但是我不想使用這種方法)
在網上查了下,發現momo已經寫出了批量建立序列幀動畫的小工具,極其友善,這裡連結附上,共同學習啦
批量建立序列幀動畫,其他的我就不說什麼啦
2.3補充:
unity之sprite序列動畫(使用unity的sprite editor):
圖檔是自己在網上下的一張序列幀圖檔
首先導入一張多序列的圖檔(帶透明通道的),
其次,我們需要修改一下sprite的設定:
應用之後,打開sprite editor面闆進行sprite的編輯(這裡有人會問,怎麼打開sprite editor面闆呢?看看上一張圖的右上角我都用紅框框框出來了啦):
接下來,就直接上一張我調好的sprite線框圖:
下面是具體怎麼制作動畫,當然這裡有一些步驟是我省略了,(比如:如何建立clip,如何調整幀速率等等,自己探索吧,都是簡單的操作)