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