| 屬性名 | 描述 |
|---|---|
| Motion | 狀態(tài)對應(yīng)的動畫。每個狀態(tài)的基本屬性,直接選擇已定義好的動畫(Animation Clip)即可 |
| Speed | 動畫播放的速度。默認值為1,表示速度為原動畫的1.0倍。 |
| Mutiplier | 勾選右側(cè)的Parameter后可用,即在計算Speed的時考慮 區(qū)域1 中定義的某個參數(shù)。若選擇的參數(shù)為smooth, 則動畫播放速度的計算公式為 smooth * speed * fps(animation clip中指定) |
| Mirror | 僅適用于humanoid animation(人型機動畫) |
| Cycle Offset | 周期偏移,取值范圍為0-1.0,用于控制動畫起始的偏移量。把它和正弦函數(shù)的offset進行對比就能夠理解了,只會影響起始動畫的播放位置。 |
| Foot IK | 僅適用于humanoid animation(人型機動畫) |
| Write Default | 最好保持默認,感興趣可以參考官方手冊 |
| Transitions | 該狀態(tài)向其他狀態(tài)發(fā)起的過渡列表,包含了Solo和Mute兩個參數(shù),在預(yù)覽狀態(tài)機的效果時起作用 |
| Add Behaviour | 用于向狀態(tài)添加“行為” |
直觀上說它們就是連接不同狀態(tài)的有向箭頭

要創(chuàng)建一個從狀態(tài)A到狀態(tài)B的過渡,直接在狀態(tài)A上 鼠標右鍵 - Make Transition并把出現(xiàn)的箭頭拖拽到狀態(tài)B上點擊鼠標左邊即可。

參數(shù)有Float,Int,Bool,Trigger。

Float、Int用來控制一個動畫狀態(tài)的參數(shù),比如速度方向等可以用數(shù)值量化的東西,
Bool用來控制動畫狀態(tài)的轉(zhuǎn)變,比如從走路轉(zhuǎn)變到跑步,
Trigger本質(zhì)上也是bool類型,但它默認為false,且當(dāng)程序設(shè)置為true后,它會自動變回false。
如下這里創(chuàng)建一個Int類型的參數(shù)AnimState

點擊連線,在Inspecter窗口中可以進行設(shè)置,在Conditions欄下可以添加條件,如下圖表示當(dāng)參數(shù)
AnimState為0時會執(zhí)行這個動畫Any State到New Animation2的過渡
必須在Parameters面板中添加了參數(shù)才可以在這里查看到,其次添加的條件為”與”關(guān)系,即必須同時滿足。

我們可以通過代碼來設(shè)置條件狀態(tài),達到動畫切換的目的
Animator ator = go1.GetComponentAnimator>();
ator.SetInteger("AnimState", 0);
上面的代碼,讓AnimState這個參數(shù)值為0,滿足了從Any State到New Animation2的過渡條件,從而實現(xiàn)New Animation2動畫的過渡。
在腳本中添加代碼
//檢查是否正在播放jump動畫.
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的每個狀態(tài)都可以掛載腳本,創(chuàng)建腳本,繼承于StateMachineBehaviour類,用于檢測狀態(tài)機中動畫切片(Anamation)的運行狀態(tài)。
官方示例:https://docs.unity3d.com/ScriptReference/StateMachineBehaviour.html
將腳本掛載在對應(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)換到另一個狀態(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)時的每一幀的monobehavior。
// 需要注意的是,OnStateIK只有在狀態(tài)位于具有IK pass的層上時才會被調(diào)用。
// 默認情況下,圖層沒有IK通道,所以這個函數(shù)不會被調(diào)用
// 關(guān)于IK的使用,可以看看這篇文章《Animator使用IK實現(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,不然動畫會出現(xiàn)抖動

不然如果沒有下個狀態(tài)切換,直接停止動作

Has Exit Time,如果勾選了,則表示在該動作完成后才允許切換,

鏡像,可以反轉(zhuǎn)當(dāng)前動畫,減少動畫師工作量

Mute相當(dāng)于把目標過渡禁用掉。Solo表示只生效這一條過渡
可以多選,當(dāng)選中后會出現(xiàn)箭頭提示
條件滿足優(yōu)先于Solo/Mute,當(dāng)條件沒有滿足時依然不會過渡

以上就是關(guān)于Unity動畫狀態(tài)機Animator使用教程的詳細內(nèi)容,更多關(guān)于Unity動畫狀態(tài)機Animator使用的資料請關(guān)注腳本之家其它相關(guān)文章!
標簽:莆田 襄陽 哈爾濱 鄂爾多斯 遵義 錫林郭勒盟 雙鴨山 丹東
巨人網(wǎng)絡(luò)通訊聲明:本文標題《關(guān)于Unity動畫狀態(tài)機Animator使用教程》,本文關(guān)鍵詞 關(guān)于,Unity,動畫,狀態(tài)機,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。