Unity 3D-Mecanim動(dòng)畫系統(tǒng)

Unity3D 動(dòng)畫系統(tǒng)分類

1.Unity3D 3.5版本之前是舊的系統(tǒng)Legacy系統(tǒng)

2.Unity3D 4.0版本新增加Mecanim動(dòng)畫系統(tǒng)

新動(dòng)畫系統(tǒng)的有點(diǎn)

1>可視化動(dòng)畫剪輯編輯

2>能夠?qū)?dòng)畫信息進(jìn)行復(fù)用

3>利用動(dòng)畫狀態(tài)機(jī)(Animation State Mechine)實(shí)現(xiàn)不同狀態(tài)下動(dòng)畫剪輯的過渡

一般動(dòng)畫系統(tǒng)的制作與使用流程

1>在第三方的建模軟件中制作好模型,接著導(dǎo)出Unity3D 支持的格式,然后導(dǎo)入U(xiǎn)nity3D中

2>通過狀態(tài)機(jī)(State Mechines)和融合樹(Blend Trees)和反向動(dòng)力學(xué)(Inverser Kinematics)等功能對(duì)動(dòng)畫剪輯進(jìn)行設(shè)置,最后使用代碼控制角色的播放。

建模注意事項(xiàng);

1.注意模型尺寸,一般在1.7~1.8之間

2.在三維建模軟件中,是角色的最底部與世界坐標(biāo)的中心點(diǎn)對(duì)齊

3.盡量把模型制作為T型姿勢(shì)

4.確保骨盆位置上骨骼關(guān)節(jié)為所有的骨骼的父層級(jí)

5.確保骨骼結(jié)構(gòu)至少為15個(gè)骨骼

一般模型建議使用FBX格式導(dǎo)出。導(dǎo)出的兩個(gè)方式:

1.所有的動(dòng)畫信息與模型信息一起導(dǎo)出,這些動(dòng)畫導(dǎo)入U(xiǎn)nity3D 之后是被視為一個(gè)連續(xù)的動(dòng)畫

2.第二種方式把每個(gè)動(dòng)畫信息單獨(dú)導(dǎo)出為FBX格式。使用此方式導(dǎo)出時(shí)候,注意對(duì)動(dòng)畫合理的命名,一般的命名的規(guī)則為:模型名稱@動(dòng)畫剪輯.FBX


運(yùn)用Mecanim動(dòng)畫系統(tǒng)制作動(dòng)畫需要進(jìn)行四步的開發(fā)

1.制作替身

2.設(shè)置動(dòng)畫狀態(tài)機(jī)

3.設(shè)置動(dòng)畫循環(huán)

4.使用代碼控制角色動(dòng)畫。

狀態(tài)機(jī)的融合樹技術(shù)(Blend Tree)

融合樹結(jié)構(gòu)可以使得一個(gè)東湖愛剪輯與另外的動(dòng)畫剪輯序列進(jìn)行光滑融合,也就是說是兩個(gè)動(dòng)畫的合并

1.在Animator窗口右鍵 Create State ——>Form New Blend Tree ? 命名BlendTree-Crouch

2.雙擊進(jìn)入BlendTree-Crouch動(dòng)畫狀態(tài),進(jìn)入Blend Tree 編輯窗口


融合樹窗口


3.選擇BlendTree-Crouch,在屬性窗口中點(diǎn)擊Motion下面“+”號(hào),在彈出的下拉菜單中選擇“Add Motion Field” 添加動(dòng)畫序列。

4.點(diǎn)擊None后面的小圓圈,打開Select Motion面板,選擇相對(duì)應(yīng)動(dòng)畫,比如如下圖所示


添加的動(dòng)畫

5.可以修改權(quán)重位置。把自動(dòng)臨界點(diǎn)(Automatic Threshholds)的勾取消掉,這樣可以自定義


修改后的權(quán)重


融合樹控制核心代碼

animator=GetComponent<Animator>();//得到物體的組件

AnimatorStateInfo stateInfo=animator.GetCurrentAnimatorStateInfo(0);//獲得動(dòng)畫器狀態(tài)信息

float h=Inout.GetAixs("Horizontal");//獲得水平的返回值

float v=Input.GetAixs("Vertical");//獲得垂直的返回值

animator.SetFloat("Speed",h*h+v*v);//把h和v求平方相加賦值給狀態(tài)機(jī)中的自定義變量Speed上

animator.SetFloat("Direction",h,DirectionDampTime,Time,delltaTiome);//DirectionDampTime這是自定定義的float變量 ??

if(stateInfo.IsName("Base Layer.Blend Tree-Crouch"))

{

? ? if(h < 0)

? ?{

? ? ? ?tranform.position+=-transform.right*leftspeed*Time.deltaTime;

? ?}

}

Animator 屬性說明:

Controller:附加到角色的動(dòng)畫控制器

Avatar:角色Avatar

Apply Root Motion:動(dòng)畫自身還是腳本控制角色的實(shí)際位置(開啟為腳本)


Animator屬性


動(dòng)畫層與身體蒙版

動(dòng)畫層技術(shù)可以從已有的動(dòng)畫創(chuàng)造出新的動(dòng)畫系統(tǒng)

融合樹技術(shù)是有兩個(gè)動(dòng)畫序列的同一谷歌的不同運(yùn)動(dòng)位置融合為骨骼的最終位置,而動(dòng)畫層用于把不通部位的東湖組合起來成為最后的全身的動(dòng)畫效果。


測(cè)試一



測(cè)試二


測(cè)試三


動(dòng)畫復(fù)用

動(dòng)畫復(fù)用就是把動(dòng)畫剪輯序列復(fù)用到其他的角色上

反向力學(xué)(IK)

反向動(dòng)力學(xué)是依據(jù)子關(guān)機(jī)的最終位置、角色來反求出父關(guān)節(jié)甚至整個(gè)骨架的形態(tài)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容