分類:Unity、C#、VS2015 瀏覽器
建立日期:2016-05-02 工具
導入角色網格和動畫及設置 Avatar 以後,就能夠準備開始在遊戲中使用它們了。如下部分涵蓋 Mecanim 提供的、用於控制及排序動畫的主要功能。 oop
使用動畫的一個常見操做是確保動畫正確循環。例如,表示走路循環的動畫片斷以相似的姿式開始、結束很是重要(如開始時左腳在地面上,結束時右腳在地面上),這樣才能確保不會出現腳滑動或奇怪的不穩定動做。Mecanim爲解決此問題提供了方便的工具,讓動畫片斷可基於姿式、旋轉和位置進行循環。 動畫
一、相關屬性 編碼
(1)Start、End--開始和結束 設計
若是拖動動畫片斷的起始 (Start) 或結束 (End) 點,你就會看到全部參數的循環 (Looping) 擬合曲線(以可以循環的參數爲基礎)。若是將起始 (Start)、結束 (End) 標記放在綠色屬性曲線的位置,那麼就會增大片斷正確循環的概率。 3d
(2)loop match--循環匹配 對象
循環匹配指示器(loop match)用於顯示所選範圍的循環情況。 blog
不是綠色的說明匹配不合適,其結果是動畫播放時可能會形成重影(也叫「僞影」)。排序
(3)Loop Pose--循環姿式
若是循環匹配 (loop match) 指示器所有都變成了綠色,說明所啓用的循環姿式 (Loop Pose)正確,這樣動畫播放時姿式循環就不會出現「僞影」。
二、動畫組件(Animator Component)
任何具備 Avatar 的遊戲對象 (GameObject) 都具備動畫組件(Animaor),該組件是角色與其行爲之間的連接。
動畫組件引用動畫控制器 (Animator Controller),該控制器用於對角色進行行爲設置。包括經過腳本控制的狀態機 (State Machine)、混合樹 (Blend Tree)和事件的設置。
相關屬性以下:
三、動畫控制器 (Animator Controller)
能夠從 動畫器控制器(Animator Controller) 視圖【菜單: 窗口 (Window)> 動畫器控制器 (Animator Controller)】查看和設置角色行爲。
動畫控制器 (Animator Controller)能夠從 工程視圖 (Project View) 【菜單: 建立 (Create) > 畫器控制器 (Animator Controller)】進行建立。這會在磁盤上建立.controller資源 ,該資源文件在工程瀏覽器 (Project Browser)中用下面的圖標顯示:
進行狀態機設置以後,能夠在層次結構視圖 (Hierarchy View) 中將控制器置於具備 Avatar 的任何角色的動畫組件上。
動畫控制器窗口 (Animator Controller Window)包括:
(1)動畫層小組件 (Animation Layer Widget) (左上角,請參閱動畫層?)
(2)事件參數小組件 (Event Parameters Widget) (左下角,請參閱動畫參數?)
(3)狀態機自己的可視化。
注意,動畫器控制器窗口 (Animator Controller Window) 會始終顯示最近選擇的 .controller 資源中的狀態機(與當前加載的場景無關)。
角色擁有幾個對應於其在遊戲中能夠執行的不一樣動做的不一樣動畫,這一點很是常見。例如,它可能在空閒時輕輕呼吸或搖擺,接受命令時走路,從平臺墜落時恐慌地舉起雙臂。回放這些動畫時進行控制多是很是複雜的腳本任務。Mecanim 借用一個稱爲狀態機的計算機科學概念來簡化角色動畫的控制和排序。
一、狀態機基本原理
基本思想是角色在任何給定時間忙於一些特殊的動做。可用的動做取決於遊戲類型,但典型動做包括空閒、走路、跑步、跳躍等。這些動做稱爲狀態,在場景中,角色處於走路、空閒等「狀態」。一般,角色要進入另外一種情況會受到限制,而不是能夠直接從任何狀態轉換成任何其餘狀態。例如,跑跳僅在角色已經在跑步時而非停滯不前時實現,因此永遠沒法直接從空閒狀態轉換成跑跳狀態。角色可從當前狀態進入下一個狀態的選型稱爲狀態轉換。總之,狀態集、轉換集和記住當前狀態的變量造成了狀態機。
狀態機的狀態和轉換可用一個圖解表示,其中節點表明狀態,弧(節點之間的箭頭)表明轉換。您能夠把當前狀態看做一個標記或置於一個節點上的突出顯示,而後只需沿着一條箭頭跳轉到另外一個節點。
動畫狀態機的價值在於能夠用相對較少的編碼便可輕鬆設計和更新。每一個狀態有一個與之相關的動做 (Motion),並在機器處於該狀態時播放。這樣就使動畫器或設計器可以定義角色動做和動畫的可能順序,無需擔憂代碼如何工做。
二、Mecanim 狀態機
Mecanim 的動畫狀態機 (Animation State Machines) 提供一種方式來概覽與特殊角色相關的所有動畫片斷,讓遊戲中的各類事件(例如用戶輸入)觸發不一樣的動畫。
可從動畫器控制器窗口設置動畫狀態機 (Animation State Machines),以下所示:
狀態機 (State Machines) 包含狀態 (States)、轉換 (Transitions) 和事件 (Events),較小的子狀態機 (Sub-State Machines) 可在較大的機器中用做組件。
三、動畫狀態 (Animation State)
動畫狀態 (Animation State) 是 動畫狀態機 (Animation State Machine)的基本構造塊。每一個狀態包含將在角色處於該狀態時播放的單獨動畫序列(或混合樹 (blend tree))。遊戲中的事件觸發狀態轉換時,角色會保留爲新狀態,該狀態的動畫序列隨後會接管播放。
相關屬性以下:
速度 (Speed) 動畫的默認速度
運動 (Motion) 分配給此狀態的動畫片斷
腳 IK (Foot IK) 是否應對此狀態考慮「腳 IK」(Foot IK)
轉換 (Transitions) 源自此狀態的轉換的列表
默認狀態(以棕色顯示)是第一次激活時計算機所處的狀態。必要時,能夠經過右鍵單擊另外一個狀態並從上下文菜單中選擇設爲默認 (Set As Default) 來更改默認狀態。每一個轉換上的獨奏 (solo) 和靜音 (mute) 複選框用於控制動畫預覽行爲 — 有關更多詳細信息,請參閱此頁面。
能夠經過在動畫器控制器窗口 (Animator Controller Window) 中右鍵單擊空白空間並從上下文菜單中選擇 建立狀態 (Create State)->空 (Empty) ,來添加新狀態。或者,能夠將一個動畫拖動到動畫器控制器窗口 (Animator Controller Window) 中以建立包含該動畫的狀態。(請注意,只能將 Mecanim 動畫拖動到控制器中 - 非 Mecanim 動畫會被拒絕。)狀態還能夠包含混合樹 (Blend Tree)。
任意狀態 (Any State)
任意狀態 (Any State) 是始終存在的特殊狀態。該狀態針對您要轉變爲特定狀態(不管您當前處於何狀態)的狀況而存在。這是將相同向外轉換添加到機器中全部狀態的快速方法。請注意,任意狀態 (Any State) 的特殊含義意味着它不能是轉換的結束點(即,跳轉到「任意狀態」不能用做挑選下一次進入的隨機狀態的方式)。
四、動畫轉換 (Animation Transition)
動畫轉換 (Animation Transition) 定義從一個 動畫狀態 (Animation State) 在任何給定時間都只能有一個轉換處於活動狀態。
相關屬性:
原子 (Atomic) 此轉換是否爲原子轉換?(沒法中斷)
條件 (Conditions) 在此處決定觸發轉換的時間時間。.
還可使用退出時間Exit Time,而不使用參數,並指定表示源狀態的規範化時間的數字(例如,0.95 表示在播放了 95% 的源片斷內容時觸發轉換)。
參數值(若是須要):能夠經過拖動重疊的開始值和結束值,來調整兩個動畫片斷之間的轉換。
遊戲動畫中的一個常見任務是在兩個或更多類似運動之間混合。最佳的已知示例多是根據角色速度混合行走和奔跑動畫。另外一個示例是角色在奔跑過程當中轉彎時向左或向右傾斜。
重要的是區分轉換 (Transition) 與混合樹 (Blend Tree)。雖然二者都用於建立平滑動畫,可是它們用於不一樣類型的狀況。
基本概念:
轉換 (Transition):用於在給定時間量內從一個動畫狀態 (Animation State) 平滑轉換爲另外一個狀態。轉換指定爲動畫狀態機 (Animation State Machine) 的一部分。若是轉換迅速,則一般可從一個運動很好地轉換爲徹底不一樣的運動。
混合樹 (Blend Tree):用於容許經過按不一樣程度組合全部動畫的各個部分來平滑混合多個動畫。各個運動參與造成最終效果的量使用混合參數進行控制,該參數只是與動畫器控制器 (Animator Controller) 關聯的數值動畫參數之一。要使混合運動有意義,混合的運動必須具備類似性質和時間。混合樹 (Blend Tree) 是動畫器控制器 (Animator Controller) 中的特殊狀態類型。
類似運動示例能夠是各類行走和奔跑動畫。要使混合工做良好,片斷中的移動必須在相同的規範化時間點發生。例如,行走和奔跑動畫能夠對齊,以便腳與地面接觸的時刻在相同的規範化時間點發生(例如,左腳在 0.0 踏地,而右腳在 0.5 踏地)。由於使用規範化時間,因此片斷是否具備不一樣長度可有可無。
要開始使用新混合樹 (Blend Tree),須要:
右鍵單擊動動畫器控制器窗口 (Animator Controller Window)上的空白空間
從出現的上下文菜單中選擇 建立狀態 (Create State) > 重新混合樹 (From New Blend Tree)。
雙擊混合樹 (Blend Tree) 以進入混合樹圖 (Blend Tree Graph)。
動畫器控制器窗口 (Animator Controller Window) 如今顯示整個混合樹 (Blend Tree) 的圖形,而檢視器 (Inspector) 顯示當前選擇的節點及其直接子級。
動畫器窗口 (Animator Window) 顯示整個 混合樹 (Blend Tree) 的圖形。左側是僅包含根混合節點 (Blend Node) 的混合樹 (Blend Tree)。右側是包含根混合節點 (Blend Node) 以及以三個動畫片斷 (Animation Clip) 做爲子節點的混合樹 (Blend Tree)。
這會爲參數值變化時的動畫組合方式提供圖形可視化(在拖動滑塊時,源自樹根的箭頭會改變其底紋以顯示主要動畫片斷)。
能夠在混合樹 (Blend Tree) 圖中選擇任何節點以在檢視器 (Inspector) 中檢視它。若是所選節點是動畫片斷 (Animation Clip),則會顯示該動畫片斷 (Animation Clip) 的檢視器 (Inspector)。若是動畫是從模型導入,則設置是隻讀的。若是節點是混合節點 (Blend Node),則會顯示混合節點 (Blend Node) 的檢視器 (Inspector)。
下圖是運動前已添加的檢視器 (Inspector) 中顯示的混合節點 (Blend Node)。
混合類型」(Blend Type) 下拉菜單用於選擇能夠根據一個或兩個參數混合的不一樣混合類型之一。能夠在如下頁面上了解有關不一樣混合類型和其餘混合樹 (Blend Tree) 選項的更多信息。
一、一維混合 (1D Blending)
混合節點 (Blend Node) 的檢視器 (Inspector) 中的第一個選項是混合類型 (Blend Type)。此下拉菜單用於選擇能夠根據一個或兩個參數混合的不一樣混合類型之一。一維混合 (1D Blending) 根據單個參數混合子運動。
設置混合類型 (Blend Type) 以後,須要執行的第一個操做是選擇將控制此混合樹 (Blend Tree) 的動畫參數 (Animation Parameter)。在此示例中,該參數爲方向 (direction),它在 -1.0(左)與 +1.0(右), 其中 0.0 表示筆直運行而不傾斜。
隨後能夠經過單擊 + ->添加運動域 (Add Motion Field) 將動畫片斷 (Animation Clip) 添加到混合樹中,從而添加各個動畫。完成後,它應相似於下面這樣:
二、二維混合 (2D Blending)
混合節點 (Blend Node)的檢視器 (Inspector) 中的第一個選項是混合類型 (Blend Type)。此下拉菜單用於選擇能夠根據一個或兩個參數混合的不一樣混合類型之一。二維混合 (2D Blending) 類型根據兩個參數混合子運動。
三、其餘混合樹 (Blend Tree) 選項
如下選項對一維和二維混合通用。
時間尺度 (Time Scale)
可使用動畫速度數字字段(頂部具備時鐘圖標的列)改變更畫片斷 (Animation Clip) 的「天然」速度,從而能夠經過使用值 2.0 做爲速度,使行走速度是之前的兩倍。調整時間尺度 (Adjust Time Scale) > 均勻速度 (Homogeneous Speed) 按鈕可從新調整片斷的速度,以便它們符合參數的最小值和最大值,可是保持最初具備的相同相對速度。
請注意,僅當全部運動都是動畫片斷 (Animation Clip) 而不是子混合樹 (Blend Tree) 時,調整時間尺度 (Adjust Time Scale) 下拉菜單纔可用。
鏡像 (Mirroring)
能夠經過啓用最右側的鏡像開關來鏡像運動列表中的任何類人動畫片斷 (Animation Clip)。此功能使您能夠採用原始形式和鏡像版本使用相同動畫,而無需兩次使用內存和空間。