• UNITY3D 動畫教程 - 學(xué)習Flappy Bird了解Native 2D中的Sprite,Animation

    2018/8/29      點(diǎn)擊:

    引子

    上一次我們講了MonoBehaviour的前世今生,了解了(le)遊戲中的每一個GameObjec都是由(yóu)腳本控製的,這一次我(wǒ)們開始將Unity中Native 2D中的Sprite,並且使用Animation來讓Sprite動起來。

    在接下(xià)來的(de)幾篇博客裏,我會通過做一個Flappy Bird來講解Unity中(zhōng)各個組件的使用,項目的源代碼在這(zhè)裏:Unity Flappy Bird。歡迎各位前去Fork和Star。

    如何創(chuàng)建Sprite

    創建一個Sprite可以遵循如下步驟(zhòu)

    1. 將一張圖片拖動到Project視圖中(zhōng)的(de)某個文件夾的方式(shì)來添加Sprite資源(yuán)。
    2. 修改Sprite資源的各(gè)項屬性,如果是SpriteSheet的話還(hái)要對它在Sprite Editor中(zhōng)進行分割。
    3. 將Sprite資源拖動到Scene視圖中,或者按住ctrl鍵同時選中SpriteSheet中(zhōng)的幾張圖片拖動到Scene視圖中,這種(zhǒng)方式會同時創建出一個動畫。

    創建Sprite的過程(chéng)中請注意(yì):

    • Sprite是作為Sprite Renderer組(zǔ)件的一個屬性(xìng)來添加到一個GameObject中的。
    • 在Sprite Renderer中的Sorting Layer屬性允許你設置(zhì)Sprite被渲染的優先級。
    • SpriteRenderer使用在Sprite屬性中的Texture, 但是使用Material中的Shader(著色器) ,默認選擇的Sprites/Default 這種Shader是(shì)忽略光照的,而Sprites/Diffuse 這種Shader則是不會(huì)忽(hū)略光照的。如果你(nǐ)將Material設置為None時,你會發現無法顯示Sprite,因為(wéi)你沒有對這個(gè)Sprite進行著(zhe)色。

    Sprite的詳細設置

     SpriteSheet:顧名思(sī)義,就(jiù)是指把多個Sprite放到一張圖(tú)片裏。一般是把一(yī)段幀動畫放在一張(zhāng)圖片裏麵,遊戲(xì)引擎會將這(zhè)個SpriteSheet進行分割,輪流播放SpriteSheet中的每一幀,形成一個動畫序列(liè)。

     我分別說一下注意事項

    1. 當Sprite Mode為(wéi)Single時,可以(yǐ)在Inspector中設置Sprite的pivot point,如果(guǒ)你以(yǐ)前使用過(guò)Cocos2d-x的話,就會知道其(qí)實這個pivot point就相當於Cocos2d-x中的anchor point。在Scene中,我們會以這個pivot point為中(zhōng)心,來對Sprite進行(háng)旋(xuán)轉(zhuǎn),平移等(děng)Transform的設置。如果你使用的是SpriteSheet的話 ,可以在Sprite Editor中對每一個Sprite進行pivot的設置。
    2. 由於在Unity中的距離單位是Unit,為了保證3D與(yǔ)2D的一致性,所以在2D遊(yóu)戲中,我們也(yě)使用Unit作為計量(liàng)單位。Pixel to Units幾位這一轉換比例。比如一張寬度(dù)為100的Sprite圖片,在Scene中顯示的(de)長度為1Unit。
    3. 在Sprite Editor中(zhōng)可以進行Automatic和Grid兩(liǎng)種形式的切割,一般來說(shuō),Automatic就已經可以比較好的解決問題了,一旦遇到我們(men)需要幾張Sprite圖片大小一致時(shí),可以(yǐ)使(shǐ)用Grid(網格)切分,來限製每(měi)個Sprite的大小。

    如何為Sprite添加一個Animation

    有兩種方式可以創建動畫,一種是我們上邊說過的,將SpriteSheet中的幾個Sprite同(tóng)時拖動到Scene視(shì)圖中。

    另一種則是在Scene視圖中,選中想要添加(jiā)動畫的GameObject,然後在Animation視圖中,點擊Add Curve來對GameObject的各種屬(shǔ)性進行動畫播放。

    在(zài)Unity中,Animation是一個(gè)比較寬(kuān)廣的概(gài)念,並不局限(xiàn)於幀動畫。它包括了GameObject的各種屬性的動態變(biàn)化。如果你點擊了Add Curve之後,你會看到這樣的界麵:

    在上麵的圖片裏你可以(yǐ)發現從Position到Color,從Rotation到Sprite都是可以進行Animation的(de),因為在Unity中的Animation實際上是(shì)在添加一個變化曲線。而不是我(wǒ)們普遍理解的(de)Animation。

    另(lìng)一個要解釋的就是Animator和Animation的區(qū)別,要注意,如果想躺一個Animation動起(qǐ)來,那麽一定需(xū)要兩個Assest資源,分別是Animation Clip和Animator Controller兩種資源。在Project中是以(yǐ)下的表現形式:

    animator是一個動畫狀態機(jī),它控製了各個Animation之間的切換。在後麵的博(bó)客中我們會講到它的使用。=w=

    Animation的(de)詳(xiáng)細設置

    我在上麵的圖中,把Animation視圖中的(de)一些重要的(de)案件在圖中標注(zhù)出來了。

    1. 關(guān)鍵幀是Animation的轉折點,你會在這一幀處(chù)設(shè)置一些Sprite的變化點,或(huò)者是Position這種數據的轉折點。
    2. 動畫事件可以在動畫的某一幀(zhēn)設置,在這一幀可以(yǐ)設置的所謂動畫事(shì)件即是這一GameObject上所有腳本組(zǔ)件的非重載函數(即排除掉OnUpdate,Start之類的函數)。設置完動畫事件之後。你會發(fā)現每次動畫(huà)循環(huán)一遍,這個函數(shù)都會在該幀被調(diào)用。
    3. 增加一條(tiáo)變化曲線,上(shàng)文中說道,可以對任(rèn)意屬性(xìng)進行變換。
    4. Sample指的(de)是取樣,即在(zài)1s內設置多少幀,在(zài)圖中(zhōng)我(wǒ)們可以看到1s的間隔中有12個虛(xū)線,代表的就是在這一秒中,我們設置了12幀來調節(jiē)動畫。注意這裏的sample和我們為遊戲設置的刷新幀率是(shì)沒有關係的。

    總結

    總的來說,在Unity的Animation中編輯(jí)動畫 是比較方便的,和以前使用Cocos2d-x編輯動畫時,有種鳥槍換炮的感覺。但是對(duì)Sprite本身的支(zhī)持 還是令人有(yǒu)些不(bú)爽,因為做2D時,還是(shì)不(bú)習慣Unity中德坐標體係,因(yīn)為製(zhì)作2D遊戲的我(wǒ)們經常害死會把像素Pixel當成是重要的度量單位,Unity換(huàn)成了Unit為單位之後,感覺有些不知所措,不過這就是3D引擎思考方式的一種變化吧(ba)。

    失敗(bài)是什麽?沒有什麽,隻是更走近成功一步;成功(gōng)是什麽?就是走過了(le)所有通向失敗的路,隻剩下一條路,那就是成功的(de)路。作者:王選易(yì)

    网站地图 正能量网-传播正能量弘扬主旋律-免费正能量网站www正能量-免费正能量网站www正能量下载在线观看官网