您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關unity中spine怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
首先我們來看到底什么是骨骼動畫:
在早期的機器上,渲染本身已經占用了很多CPU資源,因此,對于渲染,往往采取的是一種空間換時間的策略,以避免在模型的渲染中繼續加重CPU的負擔。幀動畫模型在這種條件下應運而生。比較著名的幀動畫格式是Quake2所采用的MD2。到今天為止,幀動畫依然存在,只不過幀動畫更多地是來描述小且動作相對少些的物體。
GPU出現后,CPU的問題早已不像以前那么突出,一些新的手段和技術也可以被應用進來了。骨骼動畫相對于幀動畫而言,更加靈活多變,但同時,骨骼動畫需要更多的計算量,因此骨骼動畫往往應用在需要著重體現動作細節的模型中。
骨骼動畫技術后于幀動畫技術出現。最開始,骨骼動畫僅用于非實時渲染的建模領域,如3DMax這類建模軟件之中,以方便美工的建模。后來,CPU從渲染中解放后,骨骼動畫才用于實時渲染的游戲中。
骨骼動畫的想法來源于人體骨骼。例如說,人的上肢所有肌肉和皮膚都受上肢骨胳的影響,而人的踝關節則分別承受小腿骨胳和腳骨的影響。根據這個我們可以將骨骼動畫理解為兩個概念: 骨骼:用以控制蒙皮的一種抽象的概念,如人體骨骼控制皮膚。 蒙皮:被骨骼控制、并顯示在外的因素,如人體的皮膚被骨骼所影響。
在最終的渲染結果中,蒙皮將完全顯示出來,蒙皮實際上就是頂點、法線和紋理坐標等將被渲染的元素。而其中,最關鍵的當然是頂點,頂點將直接被骨頭牽扯運動,因而使得整個模型呈現骨骼所決定的樣子。
骨骼是一種抽象的概念,在最終的渲染結果中,它不可見。類如人體骨骼、骨骼是若干骨頭(Bone)成樹狀的集合體,而每塊骨頭又分別與若干數量的蒙皮頂點關聯。當骨頭運動的時候,與之關聯的所有蒙皮頂點也會受骨骼的影響而運動。
骨頭與蒙皮頂點的關聯需要考慮到每塊骨頭對蒙皮頂點的影響。 盡管大部分情況下,一個頂點將僅僅被一個骨頭的影響,但是關節處的頂點往往被多根骨頭影響,例如踝關節,可能會分別受小腿骨50%和腳骨50%的影響,這種影響叫作權重(Weight)。
在這種情況下,我們稱踝關節的這些頂點,受小腿骨影響的權重是50%,受腳骨影響的權重也是50%。
而在Unity3D中骨骼動畫插件有比較多,例如Uni2D,SmoothMovoe,Puppet2D等等,但為了方便美術人員編輯我們項目使用是spine
spine容易上手,并且它提供了mesh,通常來說一張紋理只有4個頂點,左下右下左上右上,但是有了mesh,我們可以抓取這個圖片,并設置大量的頂點給它,之后就能通過對頂點的設置完成圖片的拉伸形變,比如乳搖功能。
spine中30幀為1s,最新版中也提供了IK,可以將骨骼固定,做動作
1:準備好unity使用Spine所需要的運行庫,可到如下地址https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-unity
使用git下載,或直接下載master.zip文件.
2:準備好Spine導出好的動畫文件,正好最近偶爾玩一個游戲,里面使用了Spine制作的骨骼動畫,我就直接使用它做好的資源記錄一下步驟,僅作筆記使用.
我這里的動畫文件資源如圖:
這里需要提前做一個準備工作,把上圖中的enemy_hunter.atlas文件重名為enemy_hunter.atlas.txt,因為unity無法識別.atlas文件,后面無法進行資源導入.
3:現在準備工作ok了,我們可以創建一個unity工程了.
a:把master.zip文件中spine-runtimes-master\spine-unity\Assets\spine-unity文件夾復制到工程的Assets文件夾中
b:把master.zip文件中spine-runtimes-master\spine-csharp\src文件夾中所有內容復制到工程的Assets\spine-csharp文件夾中
4:導入資源
a:這里我在資源面板右鍵新建一個文件夾,用來存放導入的資源,建議導入順序為".png" ".json" ".atlas.txt",這樣在最后導入".atlas.txt"文件的時候,會自動生成enemy_hunter_Material.mat文件和enemy_hunter_Atlas.asset文件.
b:右鍵新建"spine skeletonData"類型文件,名稱為"enemy_hunter_SkeletonData.asset",這里結合網上的資料,感覺以前的版本,應該都是自動生成的,不知道這里為什么需要手動建立這個文件,之前的版本也沒有使用過,純屬猜測.文件新建好后,需要配置Skeleton JSON屬性,指定"enemy_hunter.json"文件,然后點擊"Attempt Reimport"的按鈕即可.完成后如圖:
到目前為止,骨骼動畫的導入工作就完成了.
5.現在我們把這個骨骼動畫加入到場景中看看效果.
新建Spine SkeletonAnimation對象,Skeleton Data Asset屬性指定為"enemy_hunter_SkeletonData.asset"文件.然后Advanced中Animation屬性選擇一個動作,Loop屬性勾上,即可循環播放.
如圖:
6:現在即可在Game面板播放觀看效果.至此Spine骨骼動畫導入unity已完成!
可以使用spine制作骨骼動畫來給unity使用。spine提供了unity運行包。運行包的版本一定要和spine版本一致,不然會報錯。
導入spine動畫:
由spine導出的動畫文件有3個:xx.atlas,xx.json,xx.png。將這三個文件直接導入unity會報錯,將xx.atlas改為xx.atlas.txt,這時會自動生成xx_Atlas.asset,xx_Material.mat。然后在unity里面create spine SkeletonData,指定xx_Atlas.asset和xx.json。就可以用SkeletonData生成動畫了。
控制動畫播放:
SkeletonAnimation skeletonAnimation; //gameobject的component。 Spine.AnimationState spineAnimationState = skeletonAnimation.state; Spine.Skeleton skeleton; spineAnimationState.SetAnimation(0, animationName, true);
切換動畫的bug:
由于spine在切換動畫的時候自動補償,用于動畫的平穩過度。但是會導致殘影等bug,這時候需要在SetAnimation前調用
skeletonAnimation.skeleton.SetToSetupPose (); spineAnimationState.ClearTracks ();
來消除前一個動畫的影響。
添加事件:
skeletonAnimation.state.Start:開始播放
skeletonAnimation.state.End:動畫被清除或者中斷
skeletonAnimation.state.Interrupt:動畫被打斷
skeletonAnimation.state.Complete:播放結束
skeletonAnimation.state.Event:用戶自定義事件
事件設置采用lambda表達式:
skeletonAnimation.state.Complete += (state, trackIndex,loopCount) => { Debug.log(""); };
動態獲取slot的坐標:
Vector3 pos = skeletonAnimation.skeleton.FindSlot("hat_1").Bone.GetWorldPosition(transform);
關于“unity中spine怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。