Unity3D 4.x 使用Mecanim实现动画控制
Unity3D 4.x 版本號(hào)之后提供了一種新的動(dòng)畫機(jī)制Mecanim,盡管眼下還支持之前的Animation。但看到Unity3D 4.3?預(yù)覽版里Sprite的動(dòng)畫也是基于Animator的,可知Mecanim將會(huì)是以后動(dòng)畫播放的趨勢(shì)!
Mecanim是一種基于狀態(tài)機(jī)的結(jié)構(gòu),不同的狀態(tài)表示一個(gè)動(dòng)作(或者多個(gè)動(dòng)作融合,或者一個(gè)子狀態(tài)機(jī))。狀態(tài)之間使用一種稱為Transition的組件關(guān)聯(lián),Transition中能夠設(shè)定一些條件,當(dāng)在Transition“源狀態(tài)”下。滿足其條件之后。將自己主動(dòng)跳轉(zhuǎn)到Transition“目的狀態(tài)”!
(詳細(xì)使用方法請(qǐng)參照Unity3D手冊(cè)Mecanim)
在一些ARPG的游戲中,比方 端游的DNF和闖關(guān)類的街機(jī)游戲,連續(xù)按攻擊鍵都會(huì)觸發(fā)一套組合攻擊。在這個(gè)過(guò)程中敵人通常是硬直狀態(tài)的。并且組合攻擊的最后一下通常是重?fù)簟_@樣做既添加了連擊帶來(lái)的爽快感。又促使玩家在攻擊時(shí)採(cǎi)取一定的攻擊策略。
Mecanim的狀態(tài)機(jī)設(shè)計(jì)就非常方便的使開(kāi)發(fā)人員實(shí)現(xiàn)了這一效果。
1.動(dòng)畫狀態(tài)機(jī)
這里僅僅用4個(gè)動(dòng)作描寫敘述,待命狀態(tài)(Idle)。攻擊1狀態(tài)(AtkSlice),攻擊2狀態(tài)(AtkStab),攻擊3狀態(tài)(AtkCleave),3個(gè)攻擊狀態(tài)分別表示連續(xù)按下“普通攻擊鍵”時(shí)觸發(fā)的狀態(tài),是有先后順序關(guān)系的。即假設(shè)在待命狀態(tài)下按下“攻擊鍵”,則進(jìn)入攻擊1狀態(tài)。假設(shè)在攻擊1狀態(tài)下繼續(xù)按下“攻擊鍵”。則進(jìn)入攻擊2狀態(tài)。假設(shè)不按下“攻擊鍵”,則回到待命狀態(tài)。攻擊2狀態(tài)到攻擊3狀態(tài)同理。攻擊3狀態(tài)覺(jué)得是重?fù)簟<催B擊結(jié)束。回到待命狀態(tài)。
狀態(tài)圖例如以下
我希望能以最少的代碼和設(shè)置完畢這個(gè)功能。所以僅僅加入了一個(gè)狀態(tài)機(jī)參數(shù) ActionCMD,如果 ActionCMD = 1 為進(jìn)入攻擊狀態(tài)參數(shù)
(1)在隨意3種攻擊狀態(tài)下,不再繼續(xù)按下“攻擊鍵”,則回到待命狀態(tài),即上圖 3條白色Transition
(2)在待命。攻擊1,攻擊2狀態(tài)下,繼續(xù)按下“攻擊鍵”,則跳轉(zhuǎn)到連擊狀態(tài)(即下一個(gè)攻擊狀態(tài))。即上圖3條藍(lán)色Transition
2.代碼實(shí)現(xiàn)
(1)狀態(tài)機(jī)設(shè)置完畢之后,要做的就是在代碼中完畢對(duì)當(dāng)前狀態(tài)的推斷,以及對(duì)狀態(tài)參數(shù)的設(shè)置。用以完畢動(dòng)畫狀態(tài)機(jī)的切換!
[csharp]?view plaincopyprint?
(2)在Start() 中獲取Animator組件引用
(3)在Update() 中依據(jù)當(dāng)前狀態(tài)和輸入?yún)?shù)促使?fàn)顟B(tài)切換
[csharp]?view plaincopyprint?
[csharp]?view plaincopyprint?
這里必須注意的是該。在Update() 二手0.6和0.8 分別低于目前的狀態(tài)應(yīng)該跳轉(zhuǎn)到待機(jī)參數(shù)Exit Time(這一次也正交)
轉(zhuǎn)載于:https://www.cnblogs.com/hrhguanli/p/4752966.html
總結(jié)
以上是生活随笔為你收集整理的Unity3D 4.x 使用Mecanim实现动画控制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PHP环境安全性能检查
- 下一篇: 一些看起来简单做起来难的程序员笔试面试题