屬性名 | 描述 |
---|---|
Motion | 狀態對應的動畫。每個狀態的基本屬性,直接選擇已定義好的動畫(Animation Clip)即可 |
Speed | 動畫播放的速度。默認值為1,表示速度為原動畫的1.0倍。 |
Mutiplier | 勾選右側的Parameter后可用,即在計算Speed的時考慮 區域1 中定義的某個參數。若選擇的參數為smooth, 則動畫播放速度的計算公式為 smooth * speed * fps(animation clip中指定) |
Mirror | 僅適用于humanoid animation(人型機動畫) |
Cycle Offset | 周期偏移,取值范圍為0-1.0,用于控制動畫起始的偏移量。把它和正弦函數的offset進行對比就能夠理解了,只會影響起始動畫的播放位置。 |
Foot IK | 僅適用于humanoid animation(人型機動畫) |
Write Default | 最好保持默認,感興趣可以參考官方手冊 |
Transitions | 該狀態向其他狀態發起的過渡列表,包含了Solo和Mute兩個參數,在預覽狀態機的效果時起作用 |
Add Behaviour | 用于向狀態添加“行為” |
直觀上說它們就是連接不同狀態的有向箭頭
要創建一個從狀態A
到狀態B
的過渡,直接在狀態A
上 鼠標右鍵 - Make Transition
并把出現的箭頭拖拽到狀態B
上點擊鼠標左邊即可。
參數有Float
,Int
,Bool
,Trigger
。
Float
、Int
用來控制一個動畫狀態的參數,比如速度方向等可以用數值量化的東西,
Bool
用來控制動畫狀態的轉變,比如從走路轉變到跑步,
Trigger
本質上也是bool
類型,但它默認為false
,且當程序設置為true
后,它會自動變回false
。
如下這里創建一個Int
類型的參數AnimState
點擊連線,在Inspecter
窗口中可以進行設置,在Conditions
欄下可以添加條件,如下圖表示當參數
AnimState
為0
時會執行這個動畫Any State
到New Animation2
的過渡
必須在Parameters面板中添加了參數才可以在這里查看到,其次添加的條件為”與”關系,即必須同時滿足。
我們可以通過代碼來設置條件狀態,達到動畫切換的目的
Animator ator = go1.GetComponentAnimator>(); ator.SetInteger("AnimState", 0);
上面的代碼,讓AnimState
這個參數值為0
,滿足了從Any State
到New Animation2
的過渡條件,從而實現New Animation2
動畫的過渡。
在腳本中添加代碼
//檢查是否正在播放jump動畫. AnimatorStateInfo stateinfo = anim.GetCurrentAnimatorStateInfo(0); bool playingJump = stateinfo.IsName("jump"); if(playingJump) { if(stateinfo.normalizedTime 1.0f) { //正在播放 } else { //播放結束 } }
當處于狀態jump
,則stateinfo.IsName("jump")
返回true
Animator
的每個狀態都可以掛載腳本,創建腳本,繼承于StateMachineBehaviour
類,用于檢測狀態機中動畫切片(Anamation
)的運行狀態。
官方示例:https://docs.unity3d.com/ScriptReference/StateMachineBehaviour.html
將腳本掛載在對應的狀態上即可。代碼如下
using System.Collections; using System.Collections.Generic; using UnityEngine; public class JumpState : StateMachineBehaviour { private GameObject player; override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // 正在played的狀態的第一幀被調用 Debug.Log("------OnStateEnter------------"); } // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { } // OnStateExit is called when a transition ends and the state machine finishes evaluating this state override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // 轉換到另一個狀態的最后一幀 被調用 Debug.Log("-------------OnStateExit-----------------"); } // OnStateMove is called right after Animator.OnAnimatorMove() override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // 在OnAnimatorMove之前被調用 } // OnStateIK is called right after Animator.OnAnimatorIK() override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // 在OnAnimatorIK之后調用,用于在播放狀態時的每一幀的monobehavior。 // 需要注意的是,OnStateIK只有在狀態位于具有IK pass的層上時才會被調用。 // 默認情況下,圖層沒有IK通道,所以這個函數不會被調用 // 關于IK的使用,可以看看這篇文章《Animator使用IK實現頭部及身體跟隨》 // https://www.jianshu.com/p/ae6d65563efa } }
Animator ator = go1.GetComponentAnimator>(); var stateinfo = ator.GetCurrentAnimatorStateInfo(0); if(stateinfo.IsName("Jump")) { ator.speed = 2; }
Can Transition To Self
,不然動畫會出現抖動
不然如果沒有下個狀態切換,直接停止動作
Has Exit Time
,如果勾選了,則表示在該動作完成后才允許切換,
鏡像,可以反轉當前動畫,減少動畫師工作量
Mute
相當于把目標過渡禁用掉。Solo
表示只生效這一條過渡
可以多選,當選中后會出現箭頭提示
條件滿足優先于Solo/Mute
,當條件沒有滿足時依然不會過渡
以上就是關于Unity動畫狀態機Animator使用教程的詳細內容,更多關于Unity動畫狀態機Animator使用的資料請關注腳本之家其它相關文章!
標簽:莆田 襄陽 哈爾濱 鄂爾多斯 遵義 錫林郭勒盟 雙鴨山 丹東
巨人網絡通訊聲明:本文標題《關于Unity動畫狀態機Animator使用教程》,本文關鍵詞 關于,Unity,動畫,狀態機,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。