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