Unity Blend Tree動(dòng)畫混合樹(shù)使用入門教程
介紹
在動(dòng)畫與動(dòng)畫的切換過(guò)程中,常因?yàn)閮蓚€(gè)動(dòng)畫之間的差距過(guò)大,而顯得動(dòng)畫的切換很不自然。
這時(shí)候就需要動(dòng)畫混合樹(shù)Blend Tree這個(gè)功能。使用混合樹(shù)可以將多個(gè)動(dòng)畫混合在一起,例如在處理角色的移動(dòng)中,走動(dòng)畫與跑動(dòng)畫切換的時(shí)候,在走動(dòng)畫與跑動(dòng)畫中生成多個(gè)過(guò)渡用的插值動(dòng)畫以達(dá)到平滑得切換的功能。
創(chuàng)建混合樹(shù)
在Animator窗口的空白處右鍵,Create State > From New Blend Tree,然后雙擊Blend Tree進(jìn)入混合樹(shù)。筆者使用的是unity2019.4的版本,現(xiàn)在混合樹(shù)有5種類型,可以在右側(cè)展開(kāi)Blend Type看到。

分別為:
- 1D
- 2D Simple Directional
- 2D Freeform Directional
- 2D Freeform Cartesian
- Direct
1D
1D混合只有一個(gè)參數(shù),比如如果使用混合樹(shù)去制作人物從站立到走到跑的混合,就比較適合使用1D混合。右鍵點(diǎn)擊混合樹(shù)根節(jié)點(diǎn),點(diǎn)擊Add Motion添加結(jié)點(diǎn),或者直接在右側(cè)菜單點(diǎn)擊加號(hào)來(lái)添加動(dòng)畫。

添加后

這里筆者添加了三個(gè)動(dòng)畫。
第一個(gè)是idle,站立不動(dòng),只有微弱的呼吸起伏

第二個(gè)是run

第三個(gè)是帶著武器沖刺sprint的姿勢(shì)

根據(jù)threshold的不同,可以產(chǎn)生出不同的融合動(dòng)畫效果
現(xiàn)在我們已知idle的threshold設(shè)定為0,run是0.5,sprint是1
參數(shù)是0到1,那我們就可以通過(guò)控制參數(shù)的大小來(lái)控制動(dòng)畫的播放。
比如,我們現(xiàn)在要取一個(gè)介于sprint和run中的動(dòng)畫,控制參數(shù)在0.5到1之間。
我們可以拖動(dòng)上方的紅線,預(yù)覽融合后的動(dòng)畫。
現(xiàn)在紅線的位置大約在0.75多一點(diǎn)的位置。

可以看到是介于上面圖二和圖三的某種動(dòng)畫


這幅圖中倒數(shù)第二列,小表下面的1是控制動(dòng)畫的播放速度,最后一列小人下面勾選的話,表示動(dòng)畫鏡像播放。
之后我們就可以使用Animator.SetFloat(“Blend”,float a)來(lái)播放你想要播放的動(dòng)畫。
2D
2D的三種融合方式,官方手冊(cè)上是這么說(shuō)的
官方文檔關(guān)于2D融合樹(shù)的描述:
2D Simple Directional:最好在運(yùn)動(dòng)表示不同方向(例如“向前走”、“向后退”、“向左走”和“向右走”或者“向上瞄準(zhǔn)”、“向下瞄準(zhǔn)”、“向左瞄準(zhǔn)”和“向右瞄準(zhǔn)”)時(shí)使用。根據(jù)需要可以包括位置 (0, 0) 處的單個(gè)運(yùn)動(dòng),例如“空閑”或“瞄準(zhǔn)”。在 Simple Directional 類型中,在同一方向上_不_應(yīng)該有多個(gè)運(yùn)動(dòng),例如“向前走”和“向前跑”。
2D Freeform Directional:運(yùn)動(dòng)表示不同方向時(shí),也使用此混合類型,但是您可以在同一方向上有多個(gè)運(yùn)動(dòng),例如“向前走”和“向前跑”。在 Freeform Directional 類型中,運(yùn)動(dòng)集應(yīng)始終包括位置 (0, 0) 處的單個(gè)運(yùn)動(dòng),例如“空閑”。
2D Freeform Cartesian:最好在運(yùn)動(dòng)不表示不同方向時(shí)使用。憑借 Freeform Cartesian,X 參數(shù)和 Y 參數(shù)可以表示不同概念,例如角速度和線速度。一個(gè)示例是諸如“向前走不轉(zhuǎn)彎”、“向前跑不轉(zhuǎn)彎”、“向前走右轉(zhuǎn)”、“向前跑右轉(zhuǎn)”之類的運(yùn)動(dòng)。

區(qū)別于1D融合樹(shù),2D的融合樹(shù)參數(shù)變成兩個(gè)。Pos X和Pos Y
紅點(diǎn)表示參數(shù)當(dāng)前的值,灰點(diǎn)托入動(dòng)畫會(huì)變成藍(lán)點(diǎn)。當(dāng)參數(shù)點(diǎn)紅點(diǎn)離某個(gè)藍(lán)點(diǎn)越近,動(dòng)畫就越趨向于表現(xiàn)此藍(lán)點(diǎn)的值。
查閱了一些文章,還是沒(méi)有徹底搞懂這三種融合方式的區(qū)別,但是就現(xiàn)在的了解程度來(lái)說(shuō):
當(dāng)這個(gè)player進(jìn)行前后左右移動(dòng)四種動(dòng)畫,但是player本身的朝向并不改變的話,可以使用2D Simple Directional,將紅點(diǎn)放置在(0,0),四個(gè)動(dòng)畫分別放在上下左右。通過(guò)獲取Vertical和horizantol的值去改變pos Y和pos X的大小。
當(dāng)這個(gè)player要進(jìn)行相對(duì)復(fù)雜的運(yùn)動(dòng),比如轉(zhuǎn)身,左前傾,右前傾等等??梢允褂?D Freeform Cartesian,即一個(gè)參數(shù)表示移動(dòng)速度,一個(gè)參數(shù)表示轉(zhuǎn)向這種感覺(jué)。
Direct
精確控制所混合的各種動(dòng)畫而不是只使用一個(gè)或兩個(gè)參數(shù)來(lái)間接混合
比如人物從某一個(gè)表情到某一個(gè)表情的過(guò)渡動(dòng)畫,就由direct模式制作。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#實(shí)現(xiàn)百分比轉(zhuǎn)小數(shù)的方法
這篇文章主要介紹了C#實(shí)現(xiàn)百分比轉(zhuǎn)小數(shù)的方法,涉及C#進(jìn)行數(shù)值計(jì)算的相關(guān)技巧,需要的朋友可以參考下2015-06-06
C#中==(雙等于號(hào))與equals()區(qū)別詳解
這兩種方式也是大家在日常編碼工作當(dāng)中用的比較多的判斷方式,本文就詳細(xì)的介紹一下C# 雙等于號(hào)與equals()區(qū)別,方便大家理解2021-05-05
親自教你實(shí)現(xiàn)棧及C#中Stack源碼分析
大家都知道棧的實(shí)現(xiàn)方式有兩種,一種是基于數(shù)組實(shí)現(xiàn)的順序棧,另一種是基于鏈表實(shí)現(xiàn)的鏈?zhǔn)綏?。這篇文章主要介紹了手把手教你實(shí)現(xiàn)棧以及C#中Stack源碼分析,需要的朋友可以參考下2021-09-09
快速了解如何在.NETCORE中使用Generic-Host建立主機(jī)
這篇文章主要介紹了如何在.NETCORE中使用Generic-Host建立主機(jī),文中代碼非常詳細(xì),可供大家參考,感興趣的朋友不妨閱讀完2020-05-05
C#中的三種定時(shí)計(jì)時(shí)器Timer用法介紹
這篇文章介紹了C#中的三種定時(shí)計(jì)時(shí)器Timer的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
C# 使用multipart form-data方式post數(shù)據(jù)到服務(wù)器
這篇文章主要介紹了C# 使用multipart form-data方式post數(shù)據(jù)到服務(wù)器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

