• 您(nín)的(de)位置:首(shǒu)頁(yè) > 新(xīn)聞動態 > Unity3D

    UNITY3D 動(dòng)畫教程 - 學習Flappy Bird了解Native 2D中的Sprite,Animation

    2018/8/29      點擊(jī):

    引子

    上一次我們講了MonoBehaviour的前世今生,了解了遊戲中(zhōng)的每一個(gè)GameObjec都是由腳本控(kòng)製的,這(zhè)一(yī)次我們開始將(jiāng)Unity中Native 2D中的Sprite,並且使用Animation來(lái)讓Sprite動起來。

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

    如何創建Sprite

    創建一個Sprite可以遵(zūn)循如(rú)下步驟

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

    創建(jiàn)Sprite的過程中請(qǐng)注意:

    • Sprite是作為Sprite Renderer組件的(de)一個屬性來添加到一(yī)個GameObject中的。
    • 在Sprite Renderer中的Sorting Layer屬(shǔ)性允許你設置(zhì)Sprite被渲染的優先(xiān)級。
    • SpriteRenderer使用在Sprite屬性中的Texture, 但是使用Material中的Shader(著色器) ,默(mò)認選擇的(de)Sprites/Default 這種Shader是(shì)忽略光照的,而Sprites/Diffuse 這種Shader則是不(bú)會忽略光(guāng)照的。如果你(nǐ)將Material設置為None時,你會發現(xiàn)無法顯示Sprite,因為你沒有(yǒu)對這個Sprite進行著色。

    Sprite的詳細設置

     SpriteSheet:顧名思義,就(jiù)是指把多個Sprite放到一張圖片裏。一般是把一段幀(zhēn)動畫放在一張圖片(piàn)裏麵,遊戲引擎會將這個SpriteSheet進行分割,輪流播放SpriteSheet中的每一幀,形成一個動畫(huà)序列。

     我(wǒ)分別說一下注意事項

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

    如何為Sprite添加一個Animation

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

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

    在Unity中,Animation是一(yī)個比較(jiào)寬廣的(de)概念,並不局限於幀動畫。它包括了GameObject的各種屬性的動態變(biàn)化。如果你點擊了Add Curve之後(hòu),你會看到這樣的界麵:

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

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

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

    Animation的詳細設置

    我在上麵(miàn)的(de)圖中,把(bǎ)Animation視圖中的(de)一些重要的案件在圖中標注出來了(le)。

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

    總結

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

    失敗是什麽?沒(méi)有(yǒu)什麽(me),隻是更走近(jìn)成功一步;成功是(shì)什麽?就是走過了所有通向失敗(bài)的路,隻剩下(xià)一條路,那就是成功的路。作者:王選易

    密桃直播-密桃直播手机版下载-蜜桃直播app下载安装-蜜桃直播官方版下载