1、Animator
Unity 中為我們提供了而全面的動(dòng)畫設(shè)計(jì)解決方案,用來(lái)完成游戲?qū)ο蟮膭?dòng)態(tài)效果的控制和創(chuàng)建
我們想要一個(gè)人物模型動(dòng)起來(lái),非常簡(jiǎn)單
只需要在人物的游戲?qū)ο笊咸砑?Animator 組件
-
然后創(chuàng)建一個(gè) Animator Controller 來(lái)控制對(duì)應(yīng)的游戲?qū)ο蟮膭?dòng)畫 Animator 即可
圖片
image.png
2、Animator Controller ——?jiǎng)赢嬁刂破髅姘?/h1>
選中 Animator Controller文件,點(diǎn)擊 Open 即可打開(kāi)控制器面板
新創(chuàng)建一個(gè) Animator Controller 默認(rèn)是沒(méi)有任何狀態(tài)的
需要自己創(chuàng)建空狀態(tài),并進(jìn)行相應(yīng)設(shè)置

3、加入動(dòng)畫
創(chuàng)建一個(gè)狀態(tài)后,我們需要給該狀態(tài)改名(為了區(qū)分狀態(tài)),并指定一個(gè)動(dòng)作 Motion
這里我創(chuàng)建的是 站立,所以就需要找到對(duì)應(yīng)的 Idel 動(dòng)畫,指定給 Motion

4、狀態(tài)切換 -> 動(dòng)畫切換
通過(guò)參數(shù)來(lái)對(duì)動(dòng)畫進(jìn)行改變
三種狀態(tài):
AnyState :任何狀態(tài)都可以進(jìn)入此狀態(tài),包括自身。用于死亡等相似的狀態(tài)。
表示任意狀態(tài)的特殊狀態(tài),以藍(lán)色標(biāo)識(shí),例如我們?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)系。
Entry:當(dāng)前狀態(tài)機(jī)入口
表示狀態(tài)機(jī)的入口狀態(tài),以綠色標(biāo)識(shí)。當(dāng)我們?yōu)槟硞€(gè)GameObject添加上Animator組件時(shí),這個(gè)組件就會(huì)開(kāi)始發(fā)揮它的作用。之前也說(shuō)過(guò)一個(gè)Animator Controller用于控制多個(gè)Animation的播放,那么默認(rèn)情況下Animator組件會(huì)播放哪個(gè)動(dòng)畫呢? ——這就是由Entry決定的。但是Entry本身并不包含動(dòng)畫,而是指向某個(gè)帶有動(dòng)畫的狀態(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)。記住, Entry 在Animator組件被激活后 無(wú)條件 跳轉(zhuǎn)到默認(rèn)狀態(tài),并且每個(gè)Layer 有且僅有一個(gè) 默認(rèn)狀態(tài)。
Exit,:表示狀態(tài)機(jī)的出口狀態(tài)
以紅色標(biāo)識(shí)。如果你的動(dòng)畫控制器只有一層,那么這個(gè)狀態(tài)可能并沒(méi)有什么卵用。但是當(dāng)你需要從子狀態(tài)機(jī)中返回到上一層(Layer)時(shí),把狀態(tài)指向Exit就可以了。
除了上述三個(gè)自帶的狀態(tài),Animator Controller的主角還是我們?nèi)藶樘砑拥母鞣N狀態(tài)。你可以把這些自定義的狀態(tài)看做一個(gè) 盛放動(dòng)畫的容器 ,它們可以表示一個(gè)準(zhǔn)備好的動(dòng)畫效果,并且可以在這些Animation Clip上“添油加醋”,再做一些只適用于當(dāng)前動(dòng)畫控制器的處理。創(chuàng)建一個(gè)自定義狀態(tài)可以通過(guò)在區(qū)域3中的任何空白區(qū)域 鼠標(biāo)右鍵->Create State->Empty來(lái)實(shí)現(xiàn)。我們可以選中某個(gè)自定義狀態(tài),并在Inspector窗口下觀察它具有的屬性:

參數(shù):
Parameters標(biāo)簽頁(yè)中的內(nèi)容可以說(shuō)是Animator必需的,包含了我們?cè)贏nimator中使用的所有“參數(shù)”。在擁有多個(gè)動(dòng)畫短片的控制器中,正是通過(guò)Parameters中的參數(shù)實(shí)現(xiàn)了不同動(dòng)畫間的轉(zhuǎn)變。
切換到Parameters標(biāo)簽頁(yè)后,我們可以通過(guò)點(diǎn)擊“+”創(chuàng)建4中類型的參數(shù),它們分別是Float、Int、Bool和Trigger。前三個(gè)都比較好理解,均屬于基本數(shù)據(jù)類型。最后一個(gè)Trigger則是一個(gè)與Bool類似的參數(shù),同樣擁有True和False兩種狀態(tài)。但是不像Bool在設(shè)置為True后會(huì)一直維持,Trigger在被觸發(fā)后會(huì)迅速重置為未觸發(fā)狀態(tài)。這個(gè)特性在設(shè)置動(dòng)畫轉(zhuǎn)變時(shí)非常實(shí)用。

6、Transition(過(guò)渡)
除了包含特定動(dòng)畫的狀態(tài),狀態(tài)機(jī)更少不了充當(dāng)不同狀態(tài)間紐帶關(guān)系的Transitions,直觀上說(shuō)它們就是連接不同狀態(tài)的 有向箭頭。
舉個(gè)例子:

以上圖為例,我們已經(jīng)創(chuàng)建了三個(gè)自定義狀態(tài)Idle, Walk 和Run,并且Idle已經(jīng)被設(shè)置為初始狀態(tài)(以橙色表示)。所以Animator組件生效時(shí)會(huì)一直處于Idle狀態(tài),如果在Animation Clip的屬性中勾選了 “Loop Time”,那么該動(dòng)畫會(huì)循環(huán)播放,否則播放一次GameObject就會(huì)停止。這種效果在GameObject是背景的大樹(shù),花草什么的就夠用了,因?yàn)樗鼈兌疾粫?huì)動(dòng)。但是我們的主角大部分情況下還是需要移動(dòng)的,所以我們機(jī)智地也準(zhǔn)備好了走路(Walk)和奔跑(Run)兩種動(dòng)畫。不過(guò)Unity還沒(méi)有智能到在物體移動(dòng)的時(shí)候自動(dòng)跳轉(zhuǎn)到名為“Walk”的狀態(tài)上,所以這個(gè)切換的時(shí)機(jī)還是需要我們控制的。記得我們之前說(shuō)的Parameters面板嘛?它們就是在這里排上用場(chǎng)的。
讓我先暫時(shí)假定一種方案:
- 物體在玩家按下方向鍵時(shí)開(kāi)始步行(Walk),并且速度會(huì)一直上升;
- 物體在速度達(dá)到10.0時(shí)會(huì)播放奔跑(Run)動(dòng)畫;
- 玩家松開(kāi)方向鍵后回到靜止(Idle)狀態(tài)。
那么我們可以定義兩個(gè)Parameter來(lái)模擬過(guò)渡條件:
- isMove, bool類型, 用于判斷用戶是否按下按鍵;
- moveSpeed, float類型, 用于判斷GameObject的速度是否達(dá)到10.0。
狀態(tài)間的過(guò)渡關(guān)系可能有五種:
- Idle -> Walk, 條件為 isMove=true
- Walk -> Idle, 條件為 isMove=false
- Walk -> Run, 條件為 moveSpeed > 10.0
- Run -> Walk, 條件為 moveSpeed < 10.0
- Run->Idle, 條件為 isMove=false
要?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)左邊即可。而設(shè)置對(duì)應(yīng)于某個(gè)過(guò)渡關(guān)系的過(guò)渡條件,直接選中過(guò)渡線并在Inspector窗口中的Conditions屬性一欄添加即可(添加的條件為&&關(guān)系,即必須同時(shí)滿足)。
關(guān)于Conditions的設(shè)置有幾點(diǎn)注意事項(xiàng)還是需要說(shuō)明一下:首先必須在Parameters面板中添加了參數(shù)才可以在這里查看到,其次添加的條件為&&”與”關(guān)系,即必須同時(shí)滿足。

注參考:https://blog.csdn.net/qq_28849871/article/details/77914922
