1. 程式人生 > >unity學習筆記-精靈集和精靈動畫

unity學習筆記-精靈集和精靈動畫

2D遊戲中,對精靈的操作需求,往往是兩點:

1、 靜態精靈:一般做背景展示等

2、 精靈動畫:幀動畫、骨骼動畫等

宣告:以下對Unity的操作,基於Unity3D 4.3.4,本人初學Unity,沒用過其他版本。

一、          精靈檔案的匯入

方法1:

如果工程在建立的時候就設定為2D,那麼當你將圖片檔案複製到Assert目錄下的時候,圖片的紋理型別預設就是Sprite了。如下圖:


方法2:

如果工程不是2D的,或者不希望改變專案的設定,可以直接將TextureType手動設定成Sprite,點選Apply確認。效果和方法1完全一樣。

二、          原生Unity中的精靈動畫

1.      大圖分解成小圖:

有時候找到的資源,是一個精靈圖集的形式,如下:

這是一個loading的圖集。將圖片拖入assert的相關目錄後,修改SpriteMode為Multiple,將精靈設定為多張精靈的集合,而不是Single。然後點選SpriteEditor,開啟精靈編輯器。

如下圖:

當然,也可以先開啟精靈編輯器,主選單中:Window> SpriteEditor。

Slice就是切片,記得js中對陣列的操作中,好像就有這個函式。

Type有兩個值可選:Automatic和Grid。Grid就是按照網格來切分,Automatic就比較傻瓜了。一般來說,圖集中的小圖之間是有空隙的,然後用Automatic,基本不用怎麼設定,就能保證不會切壞。如下:

最後,點選Apply確定。然後就會發現,圖集下面已經出現了很多的小圖:

然後將這些小圖片全部選中,直接拖放到Scene裡面,就生成了anim動畫檔案。不能再簡單了。不過這樣製作出來的動畫,都是幀動畫。


2.      幀動畫:

Unity如果需要製作幀動畫,原生編輯器就是支援的。Window->Animation,開啟動畫編輯器。將需要製作動畫的第一幀拖放到Scene中,然後選中這個精靈,如下圖:

點選AddCurve,Transform、 SpriteRenderer、Animator這3個其實分別對應Inspector中精靈的3類屬性。比如:

當然,我這個是惡搞的。Scale負責縮放的變化,Sprite負責切換精靈圖片。然後就變成了一段幀動畫。增加關鍵幀的話,在時間線處右鍵選單中有AddKey。選中某幀,在Inspector中修改屬性就可以。動畫製作太隨心所欲了。

三、          2Dtoolkit中的精靈圖集和幀動畫

1.      圖集的製作

在Project中,Create>tk2d>SpriteCollection。圖集是製作成prefab的檔案形式。設定好檔案儲存引數後,

從這裡開啟編輯器。

然後將需要打包的圖片,拖放到編輯器左側。如下圖:

然後就是修改每個精靈的引數了。最需要關注的就是Anchor和ColliderType了。比如這個波浪形的地面,碰撞器型別,我設定為Polygon多邊形,然後這個Convex就必須勾選。設定為凸多邊形,碰撞檢測中會用到。點選編輯器最下方的Collider,就可以自行編輯碰撞區域了。

編輯中的操作,右下角是有提示的:

最後點選右上角的commit完成。

2.      幀動畫

仍然是在Project中,Create>tk2d>SpriteAnimation。建立檔案後,開啟編輯器:

Clip就是幀動畫了。

Play用來播放動畫或者暫停。WrapMode是動畫的播放方式,是迴圈播放,還是片段迴圈等。Reverse是將動畫反轉,就是倒播。Collection和Sprite分別用來設定當前幀的精靈集和具體精靈。如果要刪除當前幀,點選Delete即可。Trigger是幀動畫的觸發事件,因為是剛開始學習,還沒開始製作具體的遊戲,這個暫時沒用到。

最後,點選右上角的commit完成修改。

3.      建立精靈動畫

Create->tk2d->Sprite WithAnimator

精靈設定為動畫的第一幀,讓選擇剛才製作的動畫集test中的sheep動畫。在game中就能看到了。

當然了,也可以先建立tk2d->Sprite,然後新增tk2dSpriteAnimator。


結果和直接建立SpriteWithAnimator是一樣的。

 

四、          在tk2d中切換動畫播放

如下:

using UnityEngine;
using System.Collections;

public class Sheep : MonoBehaviour {

	private tk2dSpriteAnimator m_Anim;
	private bool m_bChange = false;

	// Use this for initialization
	void Start () {
		m_Anim = GetComponent<tk2dSpriteAnimator>();
		print ("初始化");
	}
	
	// Update is called once per frame
	void Update () {
		if (Input.GetMouseButtonDown (0)) {
			print("左鍵點選");
			if (m_bChange) {
				m_Anim.Play("eat");
			} else {
				m_Anim.Play("bian");
			}
			m_bChange = !m_bChange;
		}
	}
}

繫結到sheep精靈上,然後這個同一個個動畫集下有兩個動畫eat和bian,通過滑鼠左鍵點選,就輪流播放了。