天天看點

圖集、sprite、序列幀

序列幀動畫制作的方法:(這裡暫不讨論drawtexture的方法)

1、如果資源是在一張圖上,如圖:

圖集、sprite、序列幀

那麼可以使用偏移來播放動畫,就是 下圖中的offSet參數(當然,在做這些之前,你要導入資源、建立材質球、選擇合适的shader等)

圖集、sprite、序列幀

知道方向了,那做起來也就友善了

建立一個腳本如下:

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、建立圖集如下:

圖集、sprite、序列幀

建立圖集:

圖集、sprite、序列幀

具體實作代碼如下:

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、序列幀

其次,我們需要修改一下sprite的設定:

圖集、sprite、序列幀
圖集、sprite、序列幀

應用之後,打開sprite editor面闆進行sprite的編輯(這裡有人會問,怎麼打開sprite editor面闆呢?看看上一張圖的右上角我都用紅框框框出來了啦):

圖集、sprite、序列幀
圖集、sprite、序列幀

接下來,就直接上一張我調好的sprite線框圖:

圖集、sprite、序列幀
圖集、sprite、序列幀

下面是具體怎麼制作動畫,當然這裡有一些步驟是我省略了,(比如:如何建立clip,如何調整幀速率等等,自己探索吧,都是簡單的操作)

圖集、sprite、序列幀
圖集、sprite、序列幀