UNITY3D 動畫教程 - 學習Flappy Bird了解Native 2D中的Sprite,Animation
引子
上一次(cì)我們講了MonoBehaviour的前世今生,了解(jiě)了遊戲中的每一(yī)個GameObjec都是由(yóu)腳本控製的,這一次我們開始將Unity中Native 2D中的Sprite,並且(qiě)使(shǐ)用Animation來讓Sprite動起來。
在接下來的幾篇博客裏,我會(huì)通過做一個(gè)Flappy Bird來講(jiǎng)解Unity中各個組件的使用,項(xiàng)目的源代碼在這裏:Unity Flappy Bird。歡(huān)迎各位前去Fork和(hé)Star。
如何創建Sprite
創(chuàng)建(jiàn)一個Sprite可(kě)以遵循(xún)如下步(bù)驟
- 將一張圖片拖動到(dào)Project視圖中的某個文件夾的方式來添加Sprite資源。
- 修改Sprite資源(yuán)的各項屬性,如果是SpriteSheet的話(huà)還要對它在Sprite Editor中(zhōng)進行分割(gē)。
- 將Sprite資源拖動到Scene視圖中,或者按(àn)住ctrl鍵同時選(xuǎn)中SpriteSheet中的幾張圖(tú)片拖動到Scene視圖中,這種方式會同時創建出一個動(dòng)畫(huà)。
創建Sprite的過程(chéng)中(zhōng)請注意:
- Sprite是作為Sprite Renderer組件的一個屬性來添加到一個GameObject中的。
- 在Sprite Renderer中的Sorting Layer屬性允許(xǔ)你設(shè)置Sprite被(bèi)渲染的優先級。
- SpriteRenderer使用(yòng)在Sprite屬性中的Texture, 但是使用Material中的Shader(著色器) ,默認選擇的Sprites/Default 這種Shader是忽略光照的,而Sprites/Diffuse 這種Shader則是不(bú)會(huì)忽略(luè)光照的。如果你將Material設置為None時,你會發現無法(fǎ)顯示Sprite,因為你沒有對這個Sprite進行著色(sè)。
Sprite的詳細設置
SpriteSheet:顧名思義,就是指把多個Sprite放到一(yī)張(zhāng)圖片裏(lǐ)。一(yī)般是把一段幀(zhēn)動畫放(fàng)在一張圖(tú)片裏麵,遊戲引擎會將這個SpriteSheet進行分割,輪流播(bō)放SpriteSheet中的每一幀,形成一個動畫(huà)序列。
我分別說一下注意事項
- 當Sprite Mode為(wéi)Single時,可以在Inspector中設置Sprite的pivot point,如果你以(yǐ)前使用(yòng)過Cocos2d-x的話,就會知道其實(shí)這個(gè)pivot point就相當於Cocos2d-x中的anchor point。在Scene中,我們(men)會以這個pivot point為中心(xīn),來對(duì)Sprite進行旋轉,平移等Transform的設(shè)置。如果你使用的是SpriteSheet的話 ,可以(yǐ)在Sprite Editor中對每一個Sprite進(jìn)行pivot的設置。
- 由於在Unity中的距離單位是Unit,為了保證3D與2D的一致性,所以在2D遊戲中,我們也(yě)使用Unit作為計量單位。Pixel to Units幾位這一轉換比例。比如一張寬度為100的Sprite圖片,在Scene中顯示的長度為1Unit。
- 在Sprite Editor中(zhōng)可以進行Automatic和Grid兩種形式的切割,一般來說(shuō),Automatic就已經可以比(bǐ)較好的解決問題了(le),一旦(dàn)遇到我們需要幾張Sprite圖片大(dà)小一致時(shí),可(kě)以使用Grid(網(wǎng)格)切分,來限製每個Sprite的大小。
如何為Sprite添加一個Animation
有兩種方式可以創(chuàng)建動畫,一種是我們(men)上邊(biān)說過的,將SpriteSheet中的幾個Sprite同時拖(tuō)動到Scene視圖中。
另一(yī)種則是在Scene視圖中,選中想要添加動畫的GameObject,然(rán)後在Animation視圖中,點擊Add Curve來對GameObject的各種屬性進行動畫播放。
在(zài)Unity中,Animation是一個比較寬廣的概念,並不(bú)局限於幀動畫。它包括了GameObject的各種屬(shǔ)性的動(dòng)態變化。如(rú)果(guǒ)你點擊(jī)了Add Curve之後,你會(huì)看到這樣的界麵:
在上麵的圖片裏你可以發現從Position到(dào)Color,從Rotation到Sprite都是(shì)可以(yǐ)進行Animation的,因為在Unity中的Animation實際上是在添加(jiā)一個變化曲線。而(ér)不是我(wǒ)們普遍理解的Animation。
另一個要解釋的就是(shì)Animator和Animation的區別,要注意,如果想躺一個Animation動起來,那麽一定(dìng)需要兩個Assest資(zī)源,分別是Animation Clip和Animator Controller兩(liǎng)種資源。在Project中是以下的表現(xiàn)形(xíng)式:
animator是一個動畫狀態機,它控製(zhì)了各個(gè)Animation之間的切換。在後(hòu)麵的博客中我們會講到它的使用。=w=
Animation的詳細(xì)設置(zhì)
我在上麵的圖中(zhōng),把Animation視圖中的一些重要的案件在圖中標注出來了。
- 關鍵幀是Animation的轉折點,你會在這一幀處設置一些Sprite的變化點,或者是Position這種數據的轉折(shé)點。
- 動畫事件(jiàn)可以在(zài)動畫的某(mǒu)一幀設置,在這一幀可(kě)以設置的所謂動畫事件即是(shì)這一GameObject上所有腳本組件的非重載(zǎi)函數(即排(pái)除掉OnUpdate,Start之類的函數)。設置完動畫事件之後。你會發現每次動畫循(xún)環(huán)一遍,這個函數(shù)都會在該幀被調用。
- 增加一條變化(huà)曲線,上文中說(shuō)道,可以對任意(yì)屬性進行(háng)變換。
- Sample指的是取樣,即在1s內設置(zhì)多少幀,在圖中我們可以看到1s的間(jiān)隔中有12個虛線,代表的就是在這一秒中,我們設置了12幀來調節動畫。注意這裏的(de)sample和我們為遊戲設(shè)置(zhì)的刷(shuā)新幀率是沒有關係的。
總結
總的來說,在Unity的Animation中編輯動畫 是比較方便的,和以前使用Cocos2d-x編輯動畫時,有(yǒu)種(zhǒng)鳥槍(qiāng)換炮的感覺(jiào)。但是對Sprite本身的支持 還是令人有些不爽,因為做2D時,還是不(bú)習慣Unity中德坐標體係,因為製作2D遊戲的我們經常害死會把像素Pixel當成是重要的度量單位,Unity換成了Unit為單位之後,感覺有些不知所措,不過這就(jiù)是(shì)3D引擎思考方式的一種變化吧。
失敗是什麽?沒有什(shí)麽,隻是更走近成功一步;成功是什麽(me)?就是走過了所有通向失敗的路,隻剩下一條路,那(nà)就是成功的路。作者:王選易
- 上一篇:Motionbuilder與(yǔ)MAYA交互方法 2018/9/6
- 下一篇:unity碰撞檢測要點總結(jié) 2018/8/7