Unity Animator動畫狀態機
一個角色一般會擁有若干不同的狀態,需要在不同的條件下播放不同的狀態動畫(執行動作),還需要控制動畫的播放速度、播放時間等。在Unity中使用動畫狀態機(Animator)來將動畫狀態以流程圖的網格化形式可視化,可以通過它來實現角色動畫狀態的播放以及切換。
Animator窗口
創建、查看和修改Animator Controller文件。
右邊部分:網格化布局區域
Entry:狀態機入口
Exit:狀態機出口
AnyState:任意狀態
State:
橙色:默認狀態,進入狀態機時默認連接該動畫
灰色:一般狀態,可以由任意狀態進入該狀態
左邊部分:狀態機的動畫層和參數
- 動畫層:使用動畫層同時控制角色不同部位或不同功能的狀態
點擊右側設置按鈕打開設置窗口
Weight:權重(0~1),1為正常播放
Mask:此層上使用的遮罩,可以限制動畫的播放部位,例如只要播放上半身的動畫,可以使用一個遮罩定義在上半身播放動畫。
Blending:
override:忽略其他層的信息
Additive:在先前層上添加動畫
Sync & Timing:用於動畫同步
Sync:勾選並選擇要同步的層,隨后狀態機的結構便會與之相同,但狀態使用的實際動畫剪輯不同。在同步層視圖中對狀態機的布局或結構所做的任何更改(添加/刪除狀態或過渡)都是針對同步層的源進行的。
Timing:同步層上的動畫的長度拉伸到與原始層上的一致,如果選中該選項,則動畫長度將在兩個動畫之間平衡(基於權重)。
IK Pass:開啟IK控制(可用以控制角色頭部注視物體)
可以通過多層動畫實現動畫的混合
-
參數:控制或影響狀態機流程
- Int - 整數
- Float - 浮點數
- Bool - true 或 false 值(由復選框表示)
- Trigger - 當被過渡使用時,由控制器重置的布爾值參數(以圓形按鈕表示)
動畫狀態
狀態基礎
Motion:狀態綁定的動畫(Animation)
Speed:動畫播放的速度 Multiplier:Speed * 指定參數(float)
作為運行時的播放速度
Motion Time:指定參數(float)作為動畫播放時間
Mirror:鏡像播放 Parameter:指定參數作(bool)為Mirror的開關
Cycle Offset:循環偏移 Parameter:指定參數(float)作為Cycle Offset
Foot IK:腳部IK修正,可解決角色跑動不正常問題
Transition
Solo:只生成當前過渡
Mute:禁用過渡
Has Exit Time:存在退出時間,即上一個狀態能否完整結束
Settings:(可通過數值修改,也可以通過圖形修改)
-
Exit Time:退出時間,前一個狀態的何時開始過渡、
-
Fixed Duration:Transition Duration以s為單位 取消勾選:Transition Duration以(前一個狀態的)百分數計數,1為100%、
-
Transition Duration:過渡時間
-
Transition Offset:過渡偏移,后一個狀態從何處開始,值為后一個狀態的百分數,1為100%。
-
nterruption Source:中斷源,可以打斷狀態的過渡、
-
None:不可打斷
-
Current State:前一個狀態開始的狀態過渡可以打斷正在進行的狀態過渡
-
Ordered Interruption:優先級高於當前過渡才可以打斷
如上述狀態過渡,當處於A->B過渡時,如果觸發A->D條件,過程不會被打斷;如果觸發A->C條件,A->B立刻被打斷轉而執行A->B過渡。 -
Next State:從后一個狀態開始的狀態過渡可以打斷正在進行的狀態過渡
A->C 和 A->D 將無法打斷這個過渡。但是,此時當我們在 A->B 過程中去觸發 B->D,State Machine 將立刻開始 A->D 的過渡,並且整個過程不需要完成 A->B 的Transition。
- Current State Then Next State || Next State Then Current State:決定哪個動畫State上的過渡節點優先權更高,前者表示先看前一個State的優先級如果沒有被觸發,再看后一個State的優先級,后者則相反,來達到不同的融合與打斷效果。
-
-
Condition:過渡條件,可從參數中選擇
- int / float :可選擇Greater(>)、Less(<)、Equals(==)、NotEqual(!=)指定的數作為過渡條件
- bool:可選擇指定值(true or false)作為過渡條件
- Trigger:條件為true時觸發狀態過渡
可以通過腳本來修改參數的值來觸發響應的的狀態過渡。