【Unity】10.4 類人動畫角色的控制


分類:Unity、C#、VS2015

創建日期:2016-05-02

一、簡介

導入角色網格和動畫及設置 Avatar 之后,就可以准備開始在游戲中使用它們了。以下部分涵蓋 Mecanim 提供的、用於控制及排序動畫的主要功能。

二、循環動畫片段

使用動畫的一個常見操作是確保動畫正確循環。例如,表示走路循環的動畫片段以類似的姿勢開始、結束非常重要(如開始時左腳在地面上,結束時右腳在地面上),這樣才能確保不會出現腳滑動或奇怪的不穩定動作。Mecanim為解決此問題提供了方便的工具,讓動畫片段可基於姿勢、旋轉和位置進行循環。

1、相關屬性

(1)Start、End--開始和結束

如果拖動動畫片段的起始 (Start) 或結束 (End) 點,你就會看到所有參數的循環 (Looping) 擬合曲線(以能夠循環的參數為基礎)。如果將起始 (Start)、結束 (End) 標記放在綠色屬性曲線的位置,那么就會增大片段正確循環的幾率。

(2)loop match--循環匹配

循環匹配指示器(loop match)用於顯示所選范圍的循環狀況。

不是綠色的說明匹配不合適,其結果是動畫播放時可能會造成重影(也叫“偽影”)。

(3)Loop Pose--循環姿勢

如果循環匹配 (loop match) 指示器全部都變成了綠色,說明所啟用的循環姿勢 (Loop Pose)正確,這樣動畫播放時姿勢循環就不會出現“偽影”。

2、動畫組件(Animator Component)

任何具有 Avatar 的游戲對象 (GameObject) 都具有動畫組件(Animaor),該組件是角色與其行為之間的鏈接。

動畫組件引用動畫控制器 (Animator Controller),該控制器用於對角色進行行為設置。包括通過腳本控制的狀態機 (State Machine)、混合樹 (Blend Tree)和事件的設置。

相關屬性如下:

  • Controller 控制器。附加到此角色的動畫器控制器
  • Avatar 此角色的Avatar。
  • Apply Root Motion 應用根運動。應從動畫本身還是從腳本控制角色的位置。
  • Animate Physics 對物理進行動畫處理。即:動畫是否應與物理交互?
  • Culling Mode 動畫的剔除模式
  • Always animate 始終播放動畫,不剔除
  • Based on Renderers 基於渲染器的動畫處理。即:當角色渲染器不可見時,僅對根運動進行動畫處理,而身體的其他身體部位都保持靜態。

3、動畫控制器 (Animator Controller)

可以從 動畫器控制器(Animator Controller) 視圖【菜單: 窗口 (Window)> 動畫器控制器 (Animator Controller)】查看和設置角色行為。

動畫控制器 (Animator Controller)可以從 工程視圖 (Project View) 【菜單: 創建 (Create) > 畫器控制器 (Animator Controller)】進行創建。這會在磁盤上創建.controller資源 ,該資源文件在工程瀏覽器 (Project Browser)中用下面的圖標顯示:

image

進行狀態機設置之后,可以在層次結構視圖 (Hierarchy View) 中將控制器置於具有 Avatar 的任何角色的動畫組件上。

動畫控制器窗口 (Animator Controller Window)包括:

(1)動畫層小組件 (Animation Layer Widget) (左上角,請參閱動畫層?)

(2)事件參數小組件 (Event Parameters Widget) (左下角,請參閱動畫參數?)

(3)狀態機本身的可視化。

注意,動畫器控制器窗口 (Animator Controller Window) 會始終顯示最近選擇的 .controller 資源中的狀態機(與當前加載的場景無關)。

三、動畫狀態機

角色擁有幾個對應於其在游戲中可以執行的不同動作的不同動畫,這一點非常常見。例如,它可能在空閑時輕輕呼吸或搖擺,接受命令時走路,從平台墜落時恐慌地舉起雙臂。回放這些動畫時進行控制可能是非常復雜的腳本任務。Mecanim 借用一個稱為狀態機的計算機科學概念來簡化角色動畫的控制和排序。

1、狀態機基本原理

基本思想是角色在任何給定時間忙於一些特殊的動作。可用的動作取決於游戲類型,但典型動作包括空閑、走路、跑步、跳躍等。這些動作稱為狀態,在場景中,角色處於走路、空閑等“狀態”。通常,角色要進入另一種狀況會受到限制,而不是可以直接從任何狀態轉換成任何其他狀態。例如,跑跳僅在角色已經在跑步時而非停滯不前時實現,所以永遠無法直接從空閑狀態轉換成跑跳狀態。角色可從當前狀態進入下一個狀態的選型稱為狀態轉換。總之,狀態集、轉換集和記住當前狀態的變量形成了狀態機。

狀態機的狀態和轉換可用一個圖解表示,其中節點代表狀態,弧(節點之間的箭頭)代表轉換。您可以把當前狀態看作一個標記或置於一個節點上的突出顯示,然后只需沿着一條箭頭跳轉到另一個節點。

image

動畫狀態機的價值在於可以用相對較少的編碼即可輕松設計和更新。每個狀態有一個與之相關的動作 (Motion),並在機器處於該狀態時播放。這樣就使動畫器或設計器能夠定義角色動作和動畫的可能順序,無需擔心代碼如何工作。

2、Mecanim 狀態機

Mecanim 的動畫狀態機 (Animation State Machines) 提供一種方式來概覽與特殊角色相關的全部動畫片段,讓游戲中的各種事件(例如用戶輸入)觸發不同的動畫。

可從動畫器控制器窗口設置動畫狀態機 (Animation State Machines),如下所示:

image

狀態機 (State Machines) 包含狀態 (States)、轉換 (Transitions) 和事件 (Events),較小的子狀態機 (Sub-State Machines) 可在較大的機器中用作組件。

3、動畫狀態 (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) 的特殊含義意味着它不能是轉換的結束點(即,跳轉到“任意狀態”不能用作挑選下一次進入的隨機狀態的方式)。

image

4、動畫轉換 (Animation Transition)

動畫轉換 (Animation Transition) 定義從一個 動畫狀態 (Animation State) 在任何給定時間都只能有一個轉換處於活動狀態。

相關屬性:

原子 (Atomic) 此轉換是否為原子轉換?(無法中斷)

條件 (Conditions) 在此處決定觸發轉換的時間時間。.

還可以使用退出時間Exit Time,而不使用參數,並指定表示源狀態的規范化時間的數字(例如,0.95 表示在播放了 95% 的源片段內容時觸發轉換)。

參數值(如果需要):可以通過拖動重疊的開始值和結束值,來調整兩個動畫片段之間的轉換。

四、混合樹 (Blend Tree)

游戲動畫中的一個常見任務是在兩個或更多相似運動之間混合。最佳的已知示例可能是根據角色速度混合行走和奔跑動畫。另一個示例是角色在奔跑過程中轉彎時向左或向右傾斜。

重要的是區分轉換 (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) 顯示當前選擇的節點及其直接子級。

image

動畫器窗口 (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)。

image

混合類型”(Blend Type) 下拉菜單用於選擇可以根據一個或兩個參數混合的不同混合類型之一。可以在以下頁面上了解有關不同混合類型和其他混合樹 (Blend Tree) 選項的更多信息。

1、一維混合 (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) 添加到混合樹中,從而添加各個動畫。完成后,它應類似於下面這樣:

image

2、二維混合 (2D Blending)

混合節點 (Blend Node)的檢視器 (Inspector) 中的第一個選項是混合類型 (Blend Type)。此下拉菜單用於選擇可以根據一個或兩個參數混合的不同混合類型之一。二維混合 (2D Blending) 類型根據兩個參數混合子運動。

3、其他混合樹 (Blend Tree) 選項

以下選項對一維和二維混合通用。

時間尺度 (Time Scale)

可以使用動畫速度數字字段(頂部具有時鍾圖標的列)改變動畫片段 (Animation Clip) 的“自然”速度,從而可以通過使用值 2.0 作為速度,使行走速度是以前的兩倍。調整時間尺度 (Adjust Time Scale) > 均勻速度 (Homogeneous Speed) 按鈕可重新調整片段的速度,以便它們符合參數的最小值和最大值,但是保持最初具有的相同相對速度。

請注意,僅當所有運動都是動畫片段 (Animation Clip) 而不是子混合樹 (Blend Tree) 時,調整時間尺度 (Adjust Time Scale) 下拉菜單才可用。

鏡像 (Mirroring)

可以通過啟用最右側的鏡像開關來鏡像運動列表中的任何類人動畫片段 (Animation Clip)。此功能使您可以采用原始形式和鏡像版本使用相同動畫,而無需兩次使用內存和空間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM