天天看點

Unity5.x Animator之BlendTree 混合樹 (Blend Tree) 一維混合 (1D Blending) 二維混合 (2D Blending) 其他混合樹 (Blend Tree) 選項

混合樹 (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),需要:

  1. 右鍵單擊動動畫器控制器視窗 (Animator Controller Window)上的空白空間
  2. 從出現的上下文菜單中選擇 建立狀态 (Create State) > 從新混合樹 (From New Blend Tree)。
  3. 輕按兩下混合樹 (Blend Tree) 以進入混合樹圖 (Blend Tree Graph)。

動畫器控制器視窗 (Animator Controller Window) 現在顯示整個混合樹 (Blend Tree) 的圖形,而檢視器 (Inspector) 顯示目前選擇的節點及其直接子級。

Unity5.x Animator之BlendTree 混合樹 (Blend Tree) 一維混合 (1D Blending) 二維混合 (2D Blending) 其他混合樹 (Blend Tree) 選項

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

Unity5.x Animator之BlendTree 混合樹 (Blend Tree) 一維混合 (1D Blending) 二維混合 (2D Blending) 其他混合樹 (Blend Tree) 選項

任何運動之前在 檢視器 (Inspector) 中顯示的混合節點 (Blend Node) 已添加。

混合類型”(Blend Type) 下拉菜單用于選擇可以根據一個或兩個參數混合的不同混合類型之一。

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

Unity5.x Animator之BlendTree 混合樹 (Blend Tree) 一維混合 (1D Blending) 二維混合 (2D Blending) 其他混合樹 (Blend Tree) 選項

具有三個卡通片段 (Animation Clip) 的一維混合 (1D Blend Node)。

頂部的示意圖顯示随着參數在其最小值與最大值之間變化,各個子運動的影響力。各個運動顯示為藍色小棱錐型(第一個和最後一個僅顯示一半),如果單擊其中一個并按住滑鼠左鍵,則對應運動會在下面的運動清單中突出顯示。各個棱錐型的頂點定義運動具有完全影響力時的參數值,這表示其動畫權重為 1,而其他動畫的權重為 0。這也稱為運動的門檻值 (Threshold)。

Unity5.x Animator之BlendTree 混合樹 (Blend Tree) 一維混合 (1D Blending) 二維混合 (2D Blending) 其他混合樹 (Blend Tree) 選項

混合節點檢視器 (Blend Node Inspector) 頂部的示意圖形象地展示各個子運動在參數值範圍内的權重。

紅色垂直條訓示參數 (Parameter) 的值。如果在檢視器 (Inspector) 底部的預覽 (Preview) 中按播放 (Play) 并在示意圖中左右拖動紅色條,則可以看到參數的值如何控制不同運動的混合。

參數範圍

混合節點 (Blend Node) 使用的參數的範圍在示意圖下方顯示為左側和右側的兩個數字。可以通過單擊數字并使用滑鼠向左或向右拖動來更改其中任一數字。請注意,這兩個值對應于運動清單中第一個和最後一個運動的門檻值。

門檻值

可以通過單擊運動在示意圖中的對應藍色棱錐型并向左或向右拖動,來更改其門檻值。如果"自動化閥值 (Automate Thresholds)" 開關未啟用,則還可以通過在閥值 (Threshold) 列的數字字段中鍵入數字來編輯運動清單中運動的門檻值。

運動清單下方是自動化閥值 (Automate Thresholds) 複選框。啟用該複選框會将運動的門檻值在參數範圍内平均分布。例如,如果有五個剪輯并且參數範圍為 -90 至 +90,則門檻值會按順序設定為 -90、-45、0、+45 和 +90。

計算閥值 (Compute Thresholds) 下拉菜單會通過從卡通片段 (Animation Clip) 中的根運動擷取的資料選擇來設定門檻值。可供選擇的資料有速度 (speed)、速率 (velocity) x、速率 (velocity) y 或速率 (velocity) z 以及角速度 (angular speed)(以度或弧度為機關)。如果參數 (parameter) 對應于這些屬性之一,則可以使用計算閥值 (Compute Threshold) 下拉菜單計算門檻值。

屬性: 功能:
速度 (Speed) 根據各個運動的速度(速率的量級)設定其門檻值。
速率 X (Velocity X) 根據各個運動的速率 (velocity) x 設定其門檻值。
速率 Y (Velocity Y) 根據各個運動的速率 (velocity) y 設定其門檻值。
速率 Z (Velocity Z) 根據各個運動的速率 (velocity) z 設定其門檻值。
角速度(弧度)(Angular Speed (Rad)) 根據各個運動的角速度(以弧度/秒為機關)設定其門檻值。
角速度(度)(Angular Speed (Deg)) 根據各個運動的角速度(以度/秒為機關)設定其門檻值。

也就是說,例如您的行走動畫每秒行進 1.5 個機關,慢跑動畫每秒行進 2.3 個機關,而奔跑動畫每秒行進 4 個機關,那麼從下拉菜單中選擇速度 (Speed) 選項會根據這些值設定三個動畫的參數範圍和門檻值。 是以,如果将速度參數設定為 3.0,則它會混合慢跑和奔跑動畫,略偏向于慢跑。

二維混合 (2D Blending)

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

不同二維混合 (2D Blend) 類型具有不同的适合用途。它們之間的差異在于計算各個運動影響力的方式。

二維簡單方向 (2D Simple Directional)
最适用于運動表示不同方向時,如“向前行走”、“向後行走”、“向左行走”和“向右行走”或是“向上瞄準”、“向下瞄準”、“向左瞄準”和“向右瞄準”。可以選擇包括位置 (0, 0) 處的單個運動,如“空閑”或“筆直瞄準”。在簡單方向 (Simple Directional) 類型中,相同方向上不應存在多個運動,如“向前行走”和“向前奔跑”。
二維任意方向 (2D Freeform Directional)
此混合類型也在運動表示不同方向時使用,但是可以在相同方向上具有多個運動,例如“向前行走”和“向前奔跑”。在任意方向 (Freeform Directional) 類型中,運動集應始終包括位置 (0, 0) 處的單個運動,如“空閑”。
二維任意笛卡爾 (2D Freeform Cartesian)
最适用于運動不表示不同方向時。使用任意笛卡爾 (Freeform Cartesian) 時,X 參數和 Y 參數可以表示不同概念,如角速度和線速度。示例包括“向前行走而不轉彎”、“向前奔跑而不轉彎”、“向前行走并右轉”、“向前奔跑并右轉”等運動。

設定“混合類型” (Blend Type) 之後,需要執行的第一個操作是選擇将控制此混合樹 (Blend Tree) 的動畫參數 (Animation Parameter) 。在此示例中,參數為 velocityX (掃射) 和 velocityZ (向前速度)。

随後可以通過單擊 + -> 添加運動區域 (Add Motion Field) 将卡通片段 (Animation Clip) 添加到混合樹中,進而添加各個動畫。完成後,它應類似于下面這樣:

Unity5.x Animator之BlendTree 混合樹 (Blend Tree) 一維混合 (1D Blending) 二維混合 (2D Blending) 其他混合樹 (Blend Tree) 選項

具有五個卡通片段 (Animation Clip) 的二維混合節點 (2D Blend Node)。

二維混合中的位置類似于一位混合中的門檻值,除了存在分别對應于兩個參數的兩個值,而不是一個值。其沿水準 X 軸上的位置對應于第一個參數,其沿垂直 Y 軸上的位置對應于第二個參數。向前行走動畫可能 velocityX 為 0 并且 velocityZ 為 1.5,進而應将這些值鍵入運動的“位置 X”(Pos X) 和“位置 Y”(Pos Y) 數字字段。

二維混合示意圖 (The 2D Blending Diagram)

檢視器 (Inspector) 頂部的示意圖顯示二維混合空間中的子運動位置。這些運動顯示為藍色點。未配置設定卡通片段 (Animation Clip) 或混合樹 (Blend Tree) 的運動對混合沒有影響力,顯示為灰色點。可以通過在示意圖中單擊其點來選擇運動。一旦選擇後,該運動對混合空間中每個點的影響力會展示為藍色區域。該區域在運動位置正下方最明顯(其中運動具有完全影響力,這表示其動畫權重為 1,而其他動畫的權重為 0)。随着距離變遠,影響力會下降,同時其他運動的影響力會逐漸占優勢。

Unity5.x Animator之BlendTree 混合樹 (Blend Tree) 一維混合 (1D Blending) 二維混合 (2D Blending) 其他混合樹 (Blend Tree) 選項

混合節點檢視器 (Blend Node Inspector) 頂部的示意圖形象地展示各個子運動在參數值範圍内的權重。

紅色點訓示兩個參數的值。如果在檢視器 (Inspector) 底部的 預覽 (Preview) 中按 播放 (Play) 并在示意圖中四處拖動紅色點,則可以看到參數值如何控制不同運動的混合。在示意圖中,還可以看到各個運動的影響力(表示為圍繞各個運動的圓形)。如果将紅色點移動到表示運動的藍色點之一上,則您會看到該運動的圓形會達到其最大半徑,而所有其他運動的圓形會縮小為不可見。在介于幾個運動之間的位置處,多個附近的運動會對混合具有一定影響力。如果選擇其中一個運動以檢視該運動的藍色影響力區域,則可以看到,随着四處移動紅色點,運動的圓形大小恰好對應于影響力區域在各個位置處的強度。

未選擇任何運動時,示意圖顯示所有影響力區域的混合,其中單個運動占優勢的位置處藍色較深,許多運動參與混合的位置處藍色較淺。

位置

可以通過單擊運動在示意圖中的對應藍色點并四處拖動,來更改運動的位置。還可以通過在“位置 X”(Pos X) 和“位置 Y”(Pos Y) 列的數字字段中鍵入數字,在運動清單中編輯運動的位置坐标。

計算位置 (Compute Positions) 下拉菜單會通過從卡通片段 (Animation Clip) 中的根運動擷取的資料選擇來設定位置。可供選擇的資料有速度 (speed)、速率 (velocity) x、速率 (velocity) y 或速率 (velocity) z 以及角速度 (angular speed)(以度或弧度為機關)。如果參數 (parameters) 對應于這些屬性之一,則可以使用“計算位置”(Compute Positions)下拉菜單計算“位置 X”(Pos X) 和/或“位置 Y”(Pos Y)。

屬性: 功能:
速率 XZ (Velocity XZ) 根據各個運動的 velocity.x 設定其“位置 X”(Pos X),并根據其 velocity.z 設定其“位置 Y”(Pos Y)。
速度和角速度 (Speed And Angular Speed) 根據各個運動的角速度(以弧度/秒為機關)設定其“位置 X”(Pos X),并根據其速度設定其“位置 Y”(Pos Y)。

而且可以選擇計算位置 (Compute Position) -> X 位置 (X Position From) 和/或 計算位置 (Compute Position) -> Y 位置 (Y Position From) 以便一次僅自動計算其中之一(另一個保持不變),進而進行混合和比對。

屬性: 功能:
速度 (Speed) 根據各個運動的速度(速率的量級)設定其“位置 X”(Pos X) 或“位置 Y”(Pos Y)。
速率 X (Velocity X) 根據各個運動的 velocity.x 設定其“位置 X”(Pos X) 或“位置 Y”(Pos Y)。
速率 Y (Velocity Y) 根據各個運動的 velocity.y 設定其“位置 X”(Pos X) 或“位置 Y”(Pos Y)。
速率 Z (Velocity Z) 根據各個運動的 velocity.z 設定其“位置 X”(Pos X) 或“位置 Y”(Pos Y)。
角速度(弧度)(Angular Speed (Rad)) 根據各個運動的角速度(以弧度/秒為機關)設定其“位置 X”(Pos X) 或“位置 Y”(Pos Y)。
角速度(度) (Angular Speed (Deg)) 根據各個運動的角速度(以度/秒為機關)設定其“位置 X”(Pos X) 或“位置 Y”(Pos Y)。

也就是說,例如您的參數對應于側向速率和向前速率,并且有一個平均速率為 (0, 0, 0) 的空閑動畫、一個平均速率為 (0, 0, 1.5) 的行走動畫以及兩個速率分别為 (-1.5, 0, 0) 和 (1.5, 0, 0) 的掃射動畫。從下拉菜單中選擇速率 XZ (Velocity XZ) 選項會根據這些速率的 X 和 Z 坐标設定運動的位置。

其他混合樹 (Blend Tree) 選項

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

時間尺度 (Time Scale)

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

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

鏡像 (Mirroring)

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

轉載:http://docs.manew.com/Components/class-BlendTree.html 視訊學習:http://www.jikexueyuan.com/course/1487.html