1. 程式人生 > >Unity動畫知識之二:Animator動畫狀態機

Unity動畫知識之二:Animator動畫狀態機

文/拉撒路

  上次我們講過Unity遊戲動畫從入門到住院,今天我們來講一下動畫狀態機。

  好了,現在我們已經成功的匯入了動畫。接下來要玩的東西就很裝13啦。因為大部分動畫師是用不到這傢伙的,需要掌握這個技能的,至少也是動畫組長級別了。嗯。。。一個組只有你一個動畫的,閉嘴!給你個同情的眼神。

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  這個裝叉的東西就是動畫狀態機

  嘛~肯定有不明真相的吃瓜群眾要問 Unity遊戲動畫 從入門到住院:動畫狀態機 ... Unity遊戲動畫 從入門到住院:動畫狀態機 ... , 這東西除了裝B還能幹嘛用。狀態機嘛,提供了動畫狀態之間的切換功能、自帶動畫融合、能編輯動畫播放的邏輯順序、能設定隨機播放、能設定行為樹。現役動畫狀態機是在4.0版本問世的,他跟前代相比。那簡直是bip骨骼跟bone骨骼的區別。

  首先,我們要建立個新的狀態機。在project面板下,點create 找到animator controller 點選建立狀態機,按F2可從命名,雙擊它進入狀態機面板。或在window視窗,找到animator開啟狀態機面板。


Unity遊戲動畫 從入門到住院:動畫狀態機 ...


Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  把做好的動畫拖入狀態機面板,或右鍵create state→empty建立空狀態,在屬性面板motion屬性欄指定動畫。

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  那麼接下來介紹下灰色矩形狀態機的inspector(屬性面板)內容

  命名 不解釋

  tag 標籤

  motion 前面說過 是指定動畫的地方

  speed 速度 動畫的播放速度 單位是倍

  mirror 映象 跟動畫系統那邊的映象沒啥區別

  cycle offset 迴圈抵消 額 貌似是迴圈次數設定

  這三個引數都有parameter這個選項 這個勾選的話就是使用動畫自帶的引數設定

  foot IK 腳部IK

  write defaults 寫入預設


Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  建立了一系列灰色矩形狀態,右鍵make transition可以給狀態機之間指定連線關係

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  選中連線,會發現連線也是有屬性設定的。譭譽參半的動作融合就是在這裡設定

  接受打斷時間 勾選後要等當前動畫播放完後,才會接下一個狀態。不勾選的話 就允許動畫播放一半時被打斷。這裡稍微介紹一下下面的引數,實際你再操作過程當中自然就理解是什麼意思了……setings設定、exit time打斷時間(從哪一幀開始逐漸降低當前動畫的權重)、fixed duration固定持續時間(這其實是一個切換開關,切換是按照秒顯示還是按照百分比顯示)、transition duration過度持續時間 (過度有多長)、transition offset過度抵消(從下一個動畫的什麼位置開始播放)、interruption source中斷來源 。


Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  嘛 給大家看一個比較簡單的動畫狀態機,這裡橙色的待機動畫是初始狀態,其他狀態都需要從這裡出發,也都能回到這裡。這是最沒有要求的的策劃寶寶 Unity遊戲動畫 從入門到住院:動畫狀態機 ... 想出的最簡單粗暴狀態邏輯了。每個灰色矩形的狀態表示一種動畫,箭頭連線表示狀態切換方向。比如待機和移動是可以互相切換過去的,但是待機能切換到死亡,死亡卻不能切回待機。正所謂人死不能待機,說的就是這個道理。這裡說個小瑕疵,就是我的狀態機是為了演示方便所以起的中文名,你的話最好不要用中文。因為。。。

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  接下來以三連擊為例,講一個相對複雜一點的狀態機關係。正常順序為待機→攻擊1→攻擊2→攻擊3→攻擊3收招→待機,這是一套三連擊打完的順序,但是玩家操作的時候可能只按了一下攻擊,那麼狀態機的順序就是待機→攻擊1→攻擊1收招→待機。攻擊2同理。這是一個有那麼點要求的act或arpg策劃大爺 Unity遊戲動畫 從入門到住院:動畫狀態機 ... 提出的合理要求。一個狀態下會有兩種支線狀態,此時的狀態機切換邏輯還是在一個小學畢業的理解水平,接下來我們說個初中畢業的。

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  在狀態機視窗空白處右鍵,create sub-state machine 建立名為次級狀態機的東西,恩,這麼low雞的名字我們肯定不會用的,我們管他叫灰色六邊形狀態機好了

Unity遊戲動畫 從入門到住院:動畫狀態機 ...

Unity遊戲動畫 從入門到住院:動畫狀態機 ...
  這個狀態機的作用是,他可以建立另外一套次級狀態。舉例來說,act遊戲中角色站著的時候有站跑攻擊防禦,下蹲的時候則是另外一套站跑攻擊防禦。下蹲就是次級狀態,因為下蹲跑,下蹲攻擊這些動作都是基於下蹲這個狀態,所以他們可以獨立成為一個次級狀態機。

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  雙擊灰色六邊形狀態機,進入次級狀態機編輯頁面。標題欄可以看到下蹲頁簽在基礎層之下。這裡簡單羅列了幾個下蹲的動畫狀態便於理解。這是一個比較有要求的策劃老爺Unity遊戲動畫 從入門到住院:動畫狀態機 ... 提出的高標準的要求,比如下蹲攻擊防禦被擊,空中攻擊防禦被擊,中毒狀態下攻擊防禦被擊,殘血狀態下攻擊防禦被擊等等不同的次級狀態。。。恩 恭喜你初中畢業,完成了九年義務教育成為了一個普通的動畫師 Unity遊戲動畫 從入門到住院:動畫狀態機 ... 

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  現在到了高中的課程了,你遇到了一個有理想的策劃爸爸 Unity遊戲動畫 從入門到住院:動畫狀態機 ... ,他向你提出了一個無理要求。當手柄搖桿輕輕向前推的時候角色緩慢的移動,全力向前推的時候角色快速跑動;當搖桿左右輕推的時候,角色小幅度的轉向,全力左右推的時候,角色大幅度轉向。放下那條狗,不要急著x它 Unity遊戲動畫 從入門到住院:動畫狀態機 ... 。能解決無理要求,這就是你和普通動畫師的區別。在別人日了狗日了整個動物園的時候,你完成了高中畢業。。。

  選擇“移動”這個灰色矩形狀態機 create new blendtree in state 建立一個行為樹。雙擊進入行為樹編輯頁面

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  為了滿足這個有理想的策劃爸爸,你需要做好以下動畫,待機、待機小轉、待機大轉、走、走小轉、走大轉、跑、跑小轉、跑大轉。轉彎的動畫可以只做一側,另一側用映象動畫實現。然後把這些動畫連結給行為樹。屬性面板,設定行為樹屬性為2D freedom cartesian,這裡不一一介紹幾個行為樹屬性標籤,大家可以自行嘗試一下,其他的標籤都是在此基礎上做減法很容易理解。

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  在motiom欄填好動畫,posX、posY設定好座標,時鐘圖標表示速度,小人圖標表示動畫映象。

  這裡的座標設定0,0原點是待機,直線向上是走,再向上是跑;原點橫向位置,近距離的是小轉動畫,遠距離的是大轉動畫,走跑也是如此。圖中紅色點表示當前角色的狀態,因為在0和1之間有無限個數字,所以這個狀態是無限的,他是多個狀態的融合,最多可以同時獲取四個動畫狀態而融合成為一個全新的中間態。做完這一步,就需要程式老爺幫忙將搖桿推動的幅度對映到這個平面上,就可以實現有理想的策劃爸爸提出的需求了。到此,閣下高中畢業,是一個了不起的人才!但是我知道你沒那麼容易滿足,接下來我們學習一點高中火箭提高班的課程吧。

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  剛剛那個有理想的策劃爸爸一拍腦門忽然有了個絕妙的點子,當角色跑到最快的狀態後,他可以爆氣,進入狂暴狀態,但是隨著狂暴值減少,要逐漸變回正常跑。此時,我們要在跑步狀態機下,加入一個線性行為樹。是的沒錯,行為樹的子級也可以是行為樹,如果你的策劃足夠睿(bian)智(tai),行為樹可以成為一個真正的,擁有無限分支的“樹”。

  最後,給大家看一個比較複雜的狀態機,它包含了一個主狀態,五個次級狀態,N個狀態機,還有一個行為樹,恩,高中火箭提高班大抵如此……

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  科科,你不會以為真的結束了吧,我是那種只能教到高中水平的人麼,咱給你來點大學的!嘛

  層動畫 看起來沒有什麼新鮮的 基本每個動畫軟體都會提供層動畫 但是unity的層動畫是在狀態機這裡 每加一個層 都可以配置一套全新的狀態機!

  終於迎來了這一天了。。。你戰勝了有理想的策劃爸爸,自以為從此天下無敵,縱橫遊戲研發界立於不敗之地。沒想到他還是出現了。

  是的就是他,他叫做外行老闆。。 Unity遊戲動畫 從入門到住院:動畫狀態機 ... 

  他提出了一個可實現的小目標,要你給每個動畫配上表情。

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  一個跑步要有喜怒哀樂憂思恐各種表情Unity遊戲動畫 從入門到住院:動畫狀態機 ... ,一個待機也要有喜怒哀樂憂思恐各種表情。你反抗說這樣資源要多出N倍,他表示我們做的是精品高品質遊戲,不在乎資源量。你狠狠地吸了一口利群,表示這樣工作量也會翻倍,他表示如果你不行就直說,他不介意換人“不過是美工而已,到處都招的到啊”。在你的人生彷徨無助的時候,你的老朋友《unity遊戲動畫 從入門到住院》永遠辣麼堅挺的在你身後頂你! Unity遊戲動畫 從入門到住院:動畫狀態機 ... 

  不就是表情嗎!新建一個動畫層!搭建一套表情的狀態機!然後做一套喜怒哀樂憂思恐的表情!注意!只要一套!然後丟給程式!讓他寫好呼叫邏輯!就可以完美實現每個動畫都有各種表情了!

  這時老闆又提出了一點小想法 Unity遊戲動畫 從入門到住院:動畫狀態機 ... ,聽說換裝很賺錢,我們也要做換裝!而且要每個衣服針對不同的動作都有對應的動畫!什麼?專案到中期了你才跟我說要加換裝?

  本寶寶捅死你哦 Unity遊戲動畫 從入門到住院:動畫狀態機 ... 

  別急別急,我們可以!我們只需要新建一個衣服的層,建立與身體動畫一一對應的狀態機,然後把衣服的動畫配置好就行了!恩這個方法是需要巨大的工作量和資源量。但是專案中期才提出換裝需求的話,這幾乎是唯一解!

  至此,老闆已經對你刮目相看 Unity遊戲動畫 從入門到住院:動畫狀態機 ...!但是他昨晚喝酒的時候又想到了一件事!“我們這個遊戲呢有各種戰鬥天使,有的長了兩個翅膀,有的長了八個翅膀,最厲害的戰鬥天使大哥長了十六個翅膀,但是他們的身體動畫都是一樣的!小夥子你想想辦法能讓他們公用身體動畫資源,然後每個人用各自的翅膀動畫!這也是聽你的想法節省資源嘛。”(別問我為什麼還不辭職,因為你窮啊!)

  好的,怎麼做!我們要給每個角色新建一個狀態機,每個狀態機分兩層。一層是身體動畫,大家公用一套動作,一層是翅膀動畫,大家用各自單獨匯出的動作。簡單嗎,就這麼簡單。呵呵呵呵嚶嚶嚶嚶 。。。我特麼到底經歷了什麼才學會的這些啊!

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  layers頁面下點選右側加號新建層

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  點選每個層的齒輪可以設定層屬性,由上到下分別是權重(這一層對動畫影響的權重值)、遮罩(身體遮罩,用來遮蓋身體各部分動畫如表情動畫需要遮蓋掉頭部以下所有部位)、混合模式(可選疊加或者覆蓋,字面意思)

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


  這裡再給大家額外介紹一種override controller。就叫他加號狀態機好了,建立它跟建立正常狀態機一樣。它相當於在一個原有的狀態機外部加一個殼,這樣我們就可以完美的繼承下來原有狀態機的所有配置,並且可以所以更改、從新指定原狀態機任意位置的動畫。

Unity遊戲動畫 從入門到住院:動畫狀態機 ...


Unity遊戲動畫 從入門到住院:動畫狀態機 ...


Unity遊戲動畫 從入門到住院:動畫狀態機 ...