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

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

    2018/8/29      點擊:

    引子(zǐ)

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

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

    如何(hé)創建Sprite

    創建一(yī)個Sprite可以遵循如(rú)下步(bù)驟

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

    創建Sprite的過程中請注意:

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

    Sprite的詳細設置

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

     我分別說一下注意事項

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

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

    有兩種方式可以創建動畫,一種是我(wǒ)們上邊(biān)說過的,將SpriteSheet中的(de)幾個Sprite同時拖動到Scene視圖中。

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

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

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

    另(lìng)一(yī)個要解釋的就是Animator和Animation的區別,要注意,如(rú)果想躺一個Animation動起來,那麽一(yī)定需要兩個Assest資源,分別是Animation Clip和(hé)Animator Controller兩(liǎng)種資源(yuán)。在Project中是以(yǐ)下的(de)表現形式:

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

    Animation的詳細設置

    我在(zài)上麵的圖中(zhōng),把Animation視圖中的一些重要的案件在圖中標注出來了。

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

    總結

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

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

    AV永久天堂网_奇米狠狠色_亚洲欧美日韩动漫_欧美日韩视频在线观看免费一区二区_日韩精品一二三区_国产AV网站18禁止人_久久久久久精品人妻免费网站不卡_国产最新视频_另类免费视频在线视频二区_久久精品免视国产