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

    2018/8/29      點擊:

    引子

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

    在接下來的幾篇博客裏,我(wǒ)會通過(guò)做一(yī)個Flappy Bird來講解Unity中各個(gè)組件的(de)使(shǐ)用,項目(mù)的(de)源代碼在這裏:Unity Flappy Bird。歡迎各位前去Fork和Star。

    如何創建(jiàn)Sprite

    創建一個(gè)Sprite可以遵循如下步驟

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

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

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

    Sprite的詳細設置

     SpriteSheet:顧(gù)名思義,就是(shì)指把多個Sprite放到一(yī)張圖片裏(lǐ)。一般是把一段幀動畫放在一張圖片裏麵,遊戲引擎會將這個SpriteSheet進(jìn)行分割,輪流播放SpriteSheet中的每一幀,形成一個動畫序列。

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

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

    如何為Sprite添加一個Animation

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

    另一種則是在Scene視圖中(zhōng),選中想(xiǎng)要添(tiān)加(jiā)動畫的GameObject,然後在Animation視圖中,點(diǎn)擊Add Curve來對GameObject的各種屬性進行(háng)動畫播放。

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

    在上麵的圖片裏(lǐ)你可以發現從Position到Color,從Rotation到Sprite都(dōu)是(shì)可以進行Animation的,因為在Unity中的Animation實際上是在添加一個(gè)變化(huà)曲(qǔ)線。而不(bú)是我們普遍(biàn)理解的Animation。

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

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

    Animation的詳細設置

    我在上麵的圖中,把Animation視圖中的一些(xiē)重要的案件在圖中標注出來(lái)了。

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

    總結

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

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

    91网站入口_91视频导航_91短视频在线_91视频在线免费观看