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