上次我們講過Unity遊戲動畫從入門到住院,今天我們來講一下動畫狀態機。
好了,現在我們已經成功的導入了動畫。接下來要玩的東西就很裝13啦。因爲大部分動畫師是用不到這傢伙的,需要掌握這個技能的,至少也是動畫組長級別了。嗯。。。一個組只有你一個動畫的,閉嘴!給你個同情的眼神。
這個裝叉的東西就是動畫狀態機
嘛~肯定有不明真相的吃瓜羣衆要問
首先,我們要創建個新的狀態機。在project面板下,點create 找到animator controller 點擊創建狀態機,按F2可從命名,雙擊它進入狀態機面板。或在window窗口,找到animator打開狀態機面板。
把做好的動畫拖入狀態機面板,或右鍵create state→empty創建空狀態,在屬性面板motion屬性欄指定動畫。
那麼接下來介紹下灰色矩形狀態機的inspector(屬性面板)內容
命名 不解釋
tag 標籤
motion 前面說過 是指定動畫的地方
speed 速度 動畫的播放速度 單位是倍
mirror 鏡像 跟動畫系統那邊的鏡像沒啥區別
cycle offset 循環抵消 額 貌似是循環次數設置
這三個參數都有parameter這個選項 這個勾選的話就是使用動畫自帶的參數設置
foot IK 腳部IK
write defaults 寫入預設
創建了一系列灰色矩形狀態,右鍵make transition可以給狀態機之間指定連接關係
選中連線,會發現連線也是有屬性設置的。譭譽參半的動作融合就是在這裏設置
接受打斷時間 勾選後要等當前動畫播放完後,纔會接下一個狀態。不勾選的話 就允許動畫播放一半時被打斷。這裏稍微介紹一下下面的參數,實際你再操作過程當中自然就理解是什麼意思了……setings設置、exit time打斷時間(從哪一幀開始逐漸降低當前動畫的權重)、fixed duration固定持續時間(這其實是一個切換開關,切換是按照秒顯示還是按照百分比顯示)、transition duration過度持續時間 (過度有多長)、transition offset過度抵消(從下一個動畫的什麼位置開始播放)、interruption source中斷來源 。
嘛 給大家看一個比較簡單的動畫狀態機,這裏橙色的待機動畫是初始狀態,其他狀態都需要從這裏出發,也都能回到這裏。這是最沒有要求的的策劃寶寶
接下來以三連擊爲例,講一個相對複雜一點的狀態機關係。正常順序爲待機→攻擊1→攻擊2→攻擊3→攻擊3收招→待機,這是一套三連擊打完的順序,但是玩家操作的時候可能只按了一下攻擊,那麼狀態機的順序就是待機→攻擊1→攻擊1收招→待機。攻擊2同理。這是一個有那麼點要求的act或arpg策劃大爺
在狀態機窗口空白處右鍵,create sub-state machine 創建名爲次級狀態機的東西,恩,這麼low雞的名字我們肯定不會用的,我們管他叫灰色六邊形狀態機好了
這個狀態機的作用是,他可以創建另外一套次級狀態。舉例來說,act遊戲中角色站着的時候有站跑攻擊防禦,下蹲的時候則是另外一套站跑攻擊防禦。下蹲就是次級狀態,因爲下蹲跑,下蹲攻擊這些動作都是基於下蹲這個狀態,所以他們可以獨立成爲一個次級狀態機。
雙擊灰色六邊形狀態機,進入次級狀態機編輯頁面。標題欄可以看到下蹲頁簽在基礎層之下。這裏簡單羅列了幾個下蹲的動畫狀態便於理解。這是一個比較有要求的策劃老爺
現在到了高中的課程了,你遇到了一個有理想的策劃爸爸
選擇“移動”這個灰色矩形狀態機 create new blendtree in state 創建一個行爲樹。雙擊進入行爲樹編輯頁面
爲了滿足這個有理想的策劃爸爸,你需要做好以下動畫,待機、待機小轉、待機大轉、走、走小轉、走大轉、跑、跑小轉、跑大轉。轉彎的動畫可以只做一側,另一側用鏡像動畫實現。然後把這些動畫鏈接給行爲樹。屬性面板,設置行爲樹屬性爲2D freedom cartesian,這裏不一一介紹幾個行爲樹屬性標籤,大家可以自行嘗試一下,其他的標籤都是在此基礎上做減法很容易理解。
在motiom欄填好動畫,posX、posY設置好座標,時鐘圖標表示速度,小人圖標表示動畫鏡像。
這裏的座標設置0,0原點是待機,直線向上是走,再向上是跑;原點橫向位置,近距離的是小轉動畫,遠距離的是大轉動畫,走跑也是如此。圖中紅色點表示當前角色的狀態,因爲在0和1之間有無限個數字,所以這個狀態是無限的,他是多個狀態的融合,最多可以同時獲取四個動畫狀態而融合成爲一個全新的中間態。做完這一步,就需要程序老爺幫忙將搖桿推動的幅度映射到這個平面上,就可以實現有理想的策劃爸爸提出的需求了。到此,閣下高中畢業,是一個了不起的人才!但是我知道你沒那麼容易滿足,接下來我們學習一點高中火箭提高班的課程吧。
剛剛那個有理想的策劃爸爸一拍腦門忽然有了個絕妙的點子,當角色跑到最快的狀態後,他可以爆氣,進入狂暴狀態,但是隨着狂暴值減少,要逐漸變回正常跑。此時,我們要在跑步狀態機下,加入一個線性行爲樹。是的沒錯,行爲樹的子級也可以是行爲樹,如果你的策劃足夠睿(bian)智(tai),行爲樹可以成爲一個真正的,擁有無限分支的“樹”。
最後,給大家看一個比較複雜的狀態機,它包含了一個主狀態,五個次級狀態,N個狀態機,還有一個行爲樹,恩,高中火箭提高班大抵如此……
科科,你不會以爲真的結束了吧,我是那種只能教到高中水平的人麼,咱給你來點大學的!嘛
層動畫 看起來沒有什麼新鮮的 基本每個動畫軟件都會提供層動畫 但是unity的層動畫是在狀態機這裏 每加一個層 都可以配置一套全新的狀態機!
終於迎來了這一天了。。。你戰勝了有理想的策劃爸爸,自以爲從此天下無敵,縱橫遊戲研發界立於不敗之地。沒想到他還是出現了。
是的就是他,他叫做外行老闆。。
他提出了一個可實現的小目標,要你給每個動畫配上表情。
一個跑步要有喜怒哀樂憂思恐各種表情
不就是表情嗎!新建一個動畫層!搭建一套表情的狀態機!然後做一套喜怒哀樂憂思恐的表情!注意!只要一套!然後丟給程序!讓他寫好調用邏輯!就可以完美實現每個動畫都有各種表情了!
這時老闆又提出了一點小想法
本寶寶捅死你哦
別急別急,我們可以!我們只需要新建一個衣服的層,創建與身體動畫一一對應的狀態機,然後把衣服的動畫配置好就行了!恩這個方法是需要巨大的工作量和資源量。但是項目中期才提出換裝需求的話,這幾乎是唯一解!
至此,老闆已經對你刮目相看
好的,怎麼做!我們要給每個角色新建一個狀態機,每個狀態機分兩層。一層是身體動畫,大家公用一套動作,一層是翅膀動畫,大家用各自單獨導出的動作。簡單嗎,就這麼簡單。呵呵呵呵嚶嚶嚶嚶 。。。我特麼到底經歷了什麼才學會的這些啊!
layers頁面下點擊右側加號新建層
點擊每個層的齒輪可以設置層屬性,由上到下分別是權重(這一層對動畫影響的權重值)、遮罩(身體遮罩,用來遮蓋身體各部分動畫如表情動畫需要遮蓋掉頭部以下所有部位)、混合模式(可選疊加或者覆蓋,字面意思)
這裏再給大家額外介紹一種override controller。就叫他加號狀態機好了,創建它跟創建正常狀態機一樣。它相當於在一個原有的狀態機外部加一個殼,這樣我們就可以完美的繼承下來原有狀態機的所有配置,並且可以所以更改、從新指定原狀態機任意位置的動畫。