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