最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Unity動畫狀態(tài)機Animator使用教程

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

一、前言

Unity可以用兩種方式控制動畫
1 Animation,這種方式簡單,直接 Play(“Idle”)或者CorssFade(“Idle”)就可以播放動畫;
2 Animator,Unity5.x之后推薦使用這種方式,因為里面可以加上混合動畫,讓動畫切換更加平滑。

二、Animator組件

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

在這里插入圖片描述

三、Animator Controller文件

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

在這里插入圖片描述

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

四、Animation Clip文件

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

在這里插入圖片描述

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

在這里插入圖片描述

在這里插入圖片描述

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

在這里插入圖片描述

通過Animator創(chuàng)建出來的Animation Clip無法直接通過掛Animation組件進行播放,如果強行播放,Console會報一條警告信息:

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有個Legacy勾選框

在這里插入圖片描述

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

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

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

在這里插入圖片描述

1、Any State狀態(tài)

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

2、Entry狀態(tài)

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

在這里插入圖片描述

當然,你可以隨時在任意一個狀態(tài)上通過 鼠標右鍵->Set as Layer Default State更改默認狀態(tài)。

在這里插入圖片描述

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

3、Exit狀態(tài)

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

在這里插入圖片描述

六、動畫狀態(tài)的屬性

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

在這里插入圖片描述

屬性名 描述
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)間的過渡關(guān)系(Transitions)

直觀上說它們就是連接不同狀態(tài)的有向箭頭

在這里插入圖片描述

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

在這里插入圖片描述

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

參數(shù)有Float,Int,BoolTrigger。

在這里插入圖片描述

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

如下這里創(chuàng)建一個Int類型的參數(shù)AnimState

在這里插入圖片描述

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

點擊連線,在Inspecter窗口中可以進行設(shè)置,在Conditions欄下可以添加條件,如下圖表示當參數(shù)
AnimState0時會執(zhí)行這個動畫Any StateNew Animation2的過渡

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

在這里插入圖片描述

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

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

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

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

十一、檢查動畫狀態(tài)

方法1、AnimatorStateInfo

在腳本中添加代碼

//檢查是否正在播放jump動畫.
AnimatorStateInfo stateinfo = anim.GetCurrentAnimatorStateInfo(0);   
bool playingJump = stateinfo.IsName("jump");
if(playingJump)
{
	if(stateinfo.normalizedTime < 1.0f)
	{
		//正在播放
	}
	else
	{
		//播放結(jié)束
	}
	
}

當處于狀態(tài)jump,則stateinfo.IsName("jump")返回true

方法2、繼承StateMachineBehaviour

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

十三、注意事項

1 取消勾選

Can Transition To Self,不然動畫會出現(xiàn)抖動

在這里插入圖片描述

2 動作循環(huán)。

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

在這里插入圖片描述

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

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

在這里插入圖片描述

十四、補充

1、Mirror

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

在這里插入圖片描述

2、Solo與Mute

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

在這里插入圖片描述

以上就是關(guān)于Unity動畫狀態(tài)機Animator使用教程的詳細內(nèi)容,更多關(guān)于Unity動畫狀態(tài)機Animator使用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Git獲取本地倉庫及基礎(chǔ)操作指令總結(jié)

    Git獲取本地倉庫及基礎(chǔ)操作指令總結(jié)

    Git是一個分布式版本控制系統(tǒng),和SVN類似,但遠比SVN強大的一個版本控制系統(tǒng)。本文為大家總結(jié)了一下Git獲取本地倉庫及基礎(chǔ)操作指令,需要的可以參考一下
    2022-08-08
  • VSCode設(shè)置默認瀏覽器打開的兩種方式

    VSCode設(shè)置默認瀏覽器打開的兩種方式

    在使用vscode編輯器的時候,如果我們不設(shè)置默認瀏覽器,那么直接打開的是IE瀏覽器,在進行頁面調(diào)試的時候無疑是有點麻煩的,這篇文章主要給大家介紹了關(guān)于VSCode設(shè)置默認瀏覽器打開的兩種方式,需要的朋友可以參考下
    2023-09-09
  • 解決VS2017不能打開stdio.h等文件的問題

    解決VS2017不能打開stdio.h等文件的問題

    下面小編就為大家?guī)硪黄鉀QVS2017不能打開stdio.h等文件的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • IDEA編寫SQL語句沒有提示的解決辦法

    IDEA編寫SQL語句沒有提示的解決辦法

    這篇文章主要給大家介紹了關(guān)于IDEA編寫SQL語句沒有提示的解決辦法,在IDEA中如果你在編寫SQL語句時沒有得到語法提示,可能是因為沒有正確配置數(shù)據(jù)庫連接或者缺少相應(yīng)的插件,需要的朋友可以參考下
    2023-08-08
  • 深度學(xué)習(xí)開源框架基礎(chǔ)算法之傅立葉變換的概要介紹

    深度學(xué)習(xí)開源框架基礎(chǔ)算法之傅立葉變換的概要介紹

    今天小編就為大家分享一篇關(guān)于深度學(xué)習(xí)開源框架基礎(chǔ)算法之傅立葉變換的概要介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Git基礎(chǔ)學(xué)習(xí)之文件刪除操作命令詳解

    Git基礎(chǔ)學(xué)習(xí)之文件刪除操作命令詳解

    這篇文章主要為大家詳細介紹了Git基礎(chǔ)學(xué)習(xí)中的文件刪除操作命令,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2022-10-10
  • Unity通過BlendShape實現(xiàn)面部表情過渡切換Animation教程

    Unity通過BlendShape實現(xiàn)面部表情過渡切換Animation教程

    眼睛慢慢瞇成一條線的人都是實力很強勁的,教你在Unity中通過BlendShape來實現(xiàn)角色面部表情過渡切換Animation,有需要的朋友可以借鑒參考下
    2021-09-09
  • IDEA升級后Git拉取和推送的標簽消失的解決方法

    IDEA升級后Git拉取和推送的標簽消失的解決方法

    本文主要介紹了IDEA升級后Git拉取和推送的標簽消失的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Windows 系統(tǒng)下的 Git 2.7 最新下載及安裝教程圖文詳解

    Windows 系統(tǒng)下的 Git 2.7 最新下載及安裝教程圖文詳解

    這篇文章主要介紹了Windows 系統(tǒng)下的 Git 2.7 最新下載及安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • VSCode修改配置(設(shè)置settings.json)匯總大全

    VSCode修改配置(設(shè)置settings.json)匯總大全

    這篇文章主要給大家介紹了關(guān)于VSCode修改配置(設(shè)置settings.json)的相關(guān)資料,setting.json是設(shè)置語言環(huán)境,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2024-01-01

最新評論

汕尾市| 荣昌县| 称多县| 金华市| 金沙县| 山丹县| 高雄县| 巴马| 金山区| 大丰市| 廊坊市| 长阳| 洛隆县| 望谟县| 南汇区| 兴义市| 彰武县| 新田县| 文水县| 台东县| 上饶县| 盐池县| 栾川县| 思茅市| 上饶市| 潮安县| 碌曲县| 凤凰县| 安顺市| 通渭县| 萝北县| 宁安市| 乐昌市| 临澧县| 辰溪县| 炉霍县| 万山特区| 遂溪县| 会同县| 红安县| 冕宁县|