欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Unity動(dòng)畫(huà)狀態(tài)機(jī)Animator使用教程

 更新時(shí)間:2021年09月03日 16:48:36   作者:林新發(fā)  
這篇文章主要介紹了關(guān)于Unity動(dòng)畫(huà)狀態(tài)機(jī)Animator的使用教程,有需要的朋友可以借鑒參考下,希望可以對(duì)廣大讀者朋友能夠有所幫助

一、前言

Unity可以用兩種方式控制動(dòng)畫(huà)
1 Animation,這種方式簡(jiǎn)單,直接 Play(“Idle”)或者CorssFade(“Idle”)就可以播放動(dòng)畫(huà);
2 Animator,Unity5.x之后推薦使用這種方式,因?yàn)槔锩婵梢约由匣旌蟿?dòng)畫(huà),讓動(dòng)畫(huà)切換更加平滑。

二、Animator組件

你通過(guò)Animation窗口(快捷鍵是Ctrl+6)中的Create New Clip創(chuàng)建Animation時(shí),一個(gè) Animator已經(jīng)悄無(wú)聲息地出現(xiàn)在了對(duì)應(yīng)的GameObject

在這里插入圖片描述

三、Animator Controller文件

在第一步中生成的Animator組件上, 第一個(gè)Controller參數(shù)在創(chuàng)建Animator時(shí)已經(jīng)被賦值了,可以點(diǎn)擊該值,并切換到Project窗口下,會(huì)發(fā)現(xiàn)這個(gè) Controller對(duì)應(yīng)的文件是一個(gè).controller文件。
Animator Controller就是動(dòng)畫(huà)控制器,負(fù)責(zé)在不同的動(dòng)畫(huà)間切換,屬于制作動(dòng)畫(huà)效果的必備原件。

在這里插入圖片描述

注意,你也可以通過(guò)GameObject上的 Add Component添加一個(gè)嶄新的 Animator組件,但是這種情況下 AnimatorController參數(shù)默認(rèn)為空,所以需要我們手動(dòng)將事先準(zhǔn)備好的.controller文件拖拽到該參數(shù)位置,動(dòng)畫(huà)控制器才能正常工作。

四、Animation Clip文件

雙擊 .controller"文件,會(huì)彈出一個(gè) Animator窗口,該窗口中顯示的就是動(dòng)畫(huà)控制器文件中的所有內(nèi)容(也可以在頂部的工具欄通過(guò) Window - Animator打開(kāi)這個(gè)界面)

在這里插入圖片描述

Project窗口右鍵單擊,選擇Create->Animation創(chuàng)建Animation Clip.anim文件)

在這里插入圖片描述

在這里插入圖片描述

再把.anim文件拖拽進(jìn)Animator窗口,作為Animator Controller的一個(gè)狀態(tài)(State

在這里插入圖片描述

通過(guò)Animator創(chuàng)建出來(lái)的Animation Clip無(wú)法直接通過(guò)掛Animation組件進(jìn)行播放,如果強(qiáng)行播放,Console會(huì)報(bào)一條警告信息:

The AnimationClip 'XXX' used by the Animation component 'XXX' must be marked as Legacy.

以及一條提示信息

Default clip could not be found in attached animations list

如下

在這里插入圖片描述

為什么呢?
如果我們把Inspector切換為Debug模式

在這里插入圖片描述

可以看到Animation Clip有個(gè)Legacy勾選框

在這里插入圖片描述

Legacy是遺產(chǎn)的意思,也就是傳統(tǒng)的通過(guò)Animation組件來(lái)播放Animation Clip的做法,如果使用Animation組件來(lái)播放Animation Clip,則必須把Legacy勾選上,不過(guò)這種方式已經(jīng)是過(guò)時(shí)的做法,推薦使用Animator來(lái)播放Animation Clip。

五、 狀態(tài)機(jī)的狀態(tài)(State)

每個(gè)Animator Controller都會(huì)自帶三個(gè)狀態(tài):Any State, EntryExit。

在這里插入圖片描述

1、Any State狀態(tài)

表示任意狀態(tài)的特殊狀態(tài)。例如我們?nèi)绻M巧谌魏螤顟B(tài)下都有可能切換到死亡狀態(tài),那么Any State就可以幫我們做到。當(dāng)你發(fā)現(xiàn)某個(gè)狀態(tài)可以從任何狀態(tài)以相同的條件跳轉(zhuǎn)到時(shí),那么你就可以用Any State來(lái)簡(jiǎn)化過(guò)渡關(guān)系。

2、Entry狀態(tài)

表示狀態(tài)機(jī)的入口狀態(tài)。當(dāng)我們?yōu)槟硞€(gè)GameObject添加上Animator組件時(shí),這個(gè)組件就會(huì)開(kāi)始發(fā)揮它的作用。
如果Animator Controller控制多個(gè)Animation的播放,那么默認(rèn)情況下Animator組件會(huì)播放哪個(gè)動(dòng)畫(huà)呢? 由Entry來(lái)決定的。
但是Entry本身并不包含動(dòng)畫(huà),而是指向某個(gè)帶有動(dòng)畫(huà)的狀態(tài),并設(shè)置其為默認(rèn)狀態(tài)。被設(shè)置為默認(rèn)狀態(tài)的狀態(tài)會(huì)顯示為 橘黃色。

在這里插入圖片描述

當(dāng)然,你可以隨時(shí)在任意一個(gè)狀態(tài)上通過(guò) 鼠標(biāo)右鍵->Set as Layer Default State更改默認(rèn)狀態(tài)。

在這里插入圖片描述

記住, EntryAnimator組件被激活后 無(wú)條件 跳轉(zhuǎn)到默認(rèn)狀態(tài),并且每個(gè)Layer有且僅有一個(gè)默認(rèn)狀態(tài)。

3、Exit狀態(tài)

表示狀態(tài)機(jī)的出口狀態(tài),以紅色標(biāo)識(shí)。如果你的動(dòng)畫(huà)控制器只有一層,那么這個(gè)狀態(tài)可能并沒(méi)有什么卵用。但是當(dāng)你需要從子狀態(tài)機(jī)中返回到上一層(Layer)時(shí),把狀態(tài)指向Exit就可以了。

在這里插入圖片描述

六、動(dòng)畫(huà)狀態(tài)的屬性

我們可以選中某個(gè)自定義狀態(tài),并在Inspector窗口下觀察它具有的屬性

在這里插入圖片描述

屬性名 描述
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)添加“行為”

七、狀態(tài)間的過(guò)渡關(guān)系(Transitions)

直觀上說(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)左邊即可。

在這里插入圖片描述

八、添加狀態(tài)控制參數(shù)

參數(shù)有FloatIntBool,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

在這里插入圖片描述

九、編輯切換狀態(tài)的條件

點(diǎn)擊連線,在Inspecter窗口中可以進(jìn)行設(shè)置,在Conditions欄下可以添加條件,如下圖表示當(dāng)參數(shù)
AnimState0時(shí)會(huì)執(zhí)行這個(gè)動(dòng)畫(huà)Any StateNew Animation2的過(guò)渡

必須在Parameters面板中添加了參數(shù)才可以在這里查看到,其次添加的條件為&&”與”關(guān)系,即必須同時(shí)滿足。

在這里插入圖片描述

十、代碼中控制狀態(tài)

我們可以通過(guò)代碼來(lái)設(shè)置條件狀態(tài),達(dá)到動(dòng)畫(huà)切換的目的

Animator ator = go1.GetComponent<Animator>();
ator.SetInteger("AnimState", 0);

上面的代碼,讓AnimState這個(gè)參數(shù)值為0,滿足了從Any StateNew Animation2的過(guò)渡條件,從而實(shí)現(xiàn)New Animation2動(dòng)畫(huà)的過(guò)渡。

十一、檢查動(dòng)畫(huà)狀態(tài)

方法1、AnimatorStateInfo

在腳本中添加代碼

//檢查是否正在播放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

方法2、繼承StateMachineBehaviour

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.GetComponent<Animator>();
var stateinfo = ator.GetCurrentAnimatorStateInfo(0);
if(stateinfo.IsName("Jump"))
{
	ator.speed = 2;
}

十三、注意事項(xiàng)

1 取消勾選

Can Transition To Self,不然動(dòng)畫(huà)會(huì)出現(xiàn)抖動(dòng)

在這里插入圖片描述

2 動(dòng)作循環(huán)。

不然如果沒(méi)有下個(gè)狀態(tài)切換,直接停止動(dòng)作

在這里插入圖片描述

3.一般我們要的都是立即切換,所以這里 不要勾選

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

在這里插入圖片描述

十四、補(bǔ)充

1、Mirror

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

在這里插入圖片描述

2、Solo與Mute

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)文章!

相關(guān)文章

  • 如何使用git拉取gitlab上的項(xiàng)目

    如何使用git拉取gitlab上的項(xiàng)目

    這篇文章主要介紹了如何使用git拉取gitlab上的項(xiàng)目問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 如何解決Git推送錯(cuò)誤:Updates were rejected問(wèn)題

    如何解決Git推送錯(cuò)誤:Updates were rejected問(wèn)題

    在使用Git推送更改時(shí),可能會(huì)遇到"Updates were rejected"錯(cuò)誤,這通常是由于遠(yuǎn)程倉(cāng)庫(kù)包含了本地不存在的更新,解決這一問(wèn)題的步驟包括拉取遠(yuǎn)程更改、解決沖突、提交更改及再次嘗試推送,遵循正確的步驟可以有效解決沖突,保持代碼庫(kù)的一致性
    2024-10-10
  • vscode?ssh遠(yuǎn)程連接服務(wù)器的思考淺析

    vscode?ssh遠(yuǎn)程連接服務(wù)器的思考淺析

    這篇文章主要為大家介紹了vscode?ssh遠(yuǎn)程連接服務(wù)器的思考淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 使用IDEA回滾某次提交的代碼步驟

    使用IDEA回滾某次提交的代碼步驟

    這篇文章主要介紹了使用IDEA回滾某次提交的代碼步驟,在平時(shí)的開(kāi)發(fā)中,不小心commit了錯(cuò)誤的代碼怎么辦,就需要用到回滾了,需要的朋友可以參考下
    2023-03-03
  • PHP VBS JS 函數(shù) 對(duì)照表

    PHP VBS JS 函數(shù) 對(duì)照表

    PHP VBS JS 函數(shù) 對(duì)照表,大家可以參考下。
    2010-03-03
  • 詳解git基本操作和指令

    詳解git基本操作和指令

    這篇文章主要介紹了git基本操作和指令的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-11-11
  • vscode遠(yuǎn)端配置及一些問(wèn)題解決方案

    vscode遠(yuǎn)端配置及一些問(wèn)題解決方案

    我們之前大概了解了vscode的本地設(shè)置,我們之前提過(guò),vscode是一款編輯器,在文本編輯方面有著強(qiáng)大的功能,vscode強(qiáng)大的功能還在于可以連接遠(yuǎn)端機(jī)器,為我們的遠(yuǎn)端機(jī)器服務(wù),今天我們主要來(lái)進(jìn)行遠(yuǎn)端配置,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 云開(kāi)發(fā) VSCode 插件 Cloudbase Toolkit 的正確打開(kāi)方式及應(yīng)用場(chǎng)景分析

    云開(kāi)發(fā) VSCode 插件 Cloudbase Toolkit 的正確打開(kāi)方式及應(yīng)用場(chǎng)景分析

    Tencent CloudBase Toolkit 是云開(kāi)發(fā)的 VS Code(Visual Studio Code)插件。這篇文章主要介紹了云開(kāi)發(fā) VSCode 插件 Cloudbase Toolkit 的正確打開(kāi)方式,需要的朋友可以參考下
    2020-07-07
  • 瀏覽器不能正常訪問(wèn)Github的問(wèn)題解決

    瀏覽器不能正常訪問(wèn)Github的問(wèn)題解決

    這篇文章主要為大家介紹了瀏覽器不能正常訪問(wèn)Github問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Wireshark零基礎(chǔ)使用超詳細(xì)教程

    Wireshark零基礎(chǔ)使用超詳細(xì)教程

    Wireshark是應(yīng)用最普遍的一款開(kāi)源抓包軟件,常用來(lái)檢測(cè)收集成績(jī)、攻打溯源、或許剖析底層通訊機(jī)制,本文給大家講解Wireshark零基礎(chǔ)使用超詳細(xì)教程,感興趣的朋友一起看看吧
    2023-08-08

最新評(píng)論