• 您的位(wèi)置:首(shǒu)頁 > 新聞動態 > Unity3D

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

    2018/8/29      點擊:

    引子

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

    在接下(xià)來的幾篇博客裏,我會通過做一(yī)個Flappy Bird來(lái)講解Unity中各個(gè)組件的使用,項目的源代碼在(zài)這裏:Unity Flappy Bird。歡(huān)迎各位前去Fork和(hé)Star。

    如何創建Sprite

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

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

    創建(jiàn)Sprite的(de)過程中請注(zhù)意:

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

    Sprite的詳(xiáng)細(xì)設置

     SpriteSheet:顧(gù)名思義,就(jiù)是(shì)指把多個Sprite放到(dào)一張圖片裏。一般是把一段幀動畫放(fàng)在一張(zhāng)圖片裏麵(miàn),遊戲引(yǐn)擎(qíng)會(huì)將這個SpriteSheet進行分割,輪流播放SpriteSheet中(zhōng)的每一幀,形成一個(gè)動畫序列。

     我分別說一下注意(yì)事項

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

    如何(hé)為Sprite添加一個Animation

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

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

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

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

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

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

    Animation的詳細設置

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

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

    總(zǒng)結

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

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

    日本中出视频|午夜免费福利在线|亚洲精品亚洲人成在线下载|国产高潮流白浆免费观看不卡|偷拍亚洲欧美|亚洲中文字幕久爱亚洲伊人|久久久久香蕉视频|国产欧美日韩一区|久久国产成人亚洲精品影院老金|久久久久中文字幕