Unity筆記——使用Animator的BlendTree制作八方向移動(dòng)
首先在?Animator?中 右鍵 - Create State - From New Blend Tree,創(chuàng)建一個(gè)新的混合樹(shù)。


根據(jù)自己的需要重命名,雙擊這個(gè)狀態(tài)進(jìn)入混合樹(shù)的編輯界面。

點(diǎn)擊現(xiàn)在僅有的這個(gè)?Blend Tree,在 Inspector 面板將 Blend Type?的?1D?切換成 2D Freeform Directional。

這個(gè)時(shí)候我們需要兩個(gè) float?類型的?parameter?用來(lái)表示x軸和y軸的運(yùn)動(dòng)。所以我們?cè)?parameters 界面新建兩個(gè)?float?類型的變量,命名可根據(jù)需要修改。

有了這兩個(gè)變量以后,我們?cè)俅芜x中 Blend Tree節(jié)點(diǎn),在Inspector界面里,將 Parameters的兩個(gè)值改為剛才新建的兩個(gè)變量,第一個(gè)表示x軸,第二個(gè)表示y軸。

設(shè)置完后,點(diǎn)擊List下面的加號(hào),選擇 Add Motion Field,添加五個(gè)項(xiàng)


把 idel 動(dòng)畫(huà),前后左右移動(dòng)的動(dòng)畫(huà)分別置入Motion中。

idel 動(dòng)畫(huà)是我的閑置動(dòng)畫(huà),在沒(méi)有任何方向輸入的時(shí)候默認(rèn)播放,Pos X?與 PosY 均設(shè)為0。
SwordRun?動(dòng)畫(huà)是前進(jìn)動(dòng)畫(huà),僅在?Y?軸的輸入為1的時(shí)候播放,所以?Pos X?設(shè)為0, Pos Y?設(shè)為1。
run back?是后退動(dòng)畫(huà),僅在 Y 軸的輸入為-1的時(shí)候播放,所以 Pos X?設(shè)為0,Pos Y?設(shè)為-1。
strafe?是橫向移動(dòng)動(dòng)畫(huà),我這里把它作為左右移動(dòng)的兼用動(dòng)畫(huà),Pos X?的值為-1和1,1表示向右移動(dòng),-1表示向左移動(dòng),Pos Y?均為0。
設(shè)置完四方向移動(dòng)后,再添加四個(gè)斜向移動(dòng)動(dòng)畫(huà)。

我這里把strafe run動(dòng)畫(huà)作為斜向移動(dòng)動(dòng)畫(huà),將?Pos X?和?Pos Y 分別設(shè)置為(-1,-1)、(1,-1)、(-1,1),(1,1)即可。
如果輸入的?x?和?y?軸的值未達(dá)標(biāo)時(shí),會(huì)播放幾個(gè)動(dòng)作的混合動(dòng)畫(huà)。
回憶一下玩過(guò)的或者看過(guò)的游戲,基本上都是前后各一個(gè)動(dòng)畫(huà),左右動(dòng)畫(huà)是一樣的,斜向動(dòng)畫(huà)應(yīng)該也是同一個(gè)。一個(gè)角色八個(gè)方向的動(dòng)畫(huà)每個(gè)都不同,過(guò)于奢侈了。
參考視頻:黑魂復(fù)刻P60

參考文檔:Unity官方手冊(cè)
https://docs.unity3d.com/cn/2020.2/Manual/BlendTree-2DBlending.html