spine 的運(yùn)行庫: https://github.com/EsotericSoftware/spine-runtimes
筆者在使用spine 時遇到的一些問題,這里基本上你也許會遇到:下面是 yizhangxyz的博客 的博客。
可以使用spine制作骨骼動畫來給unity使用。spine提供了unity運(yùn)行包。運(yùn)行包的版本一定要和spine版本一致,不然會報錯。
導(dǎo)入spine動畫:
由spine導(dǎo)出的動畫文件有3個:xx.atlas,xx.json,xx.png。將這三個文件直接導(dǎo)入unity會報錯,將xx.atlas改為xx.atlas.txt,這時會自動生成xx_Atlas.asset,xx_Material.mat。然后在unity里面create spine SkeletonData,指定xx_Atlas.asset和xx.json。就可以用SkeletonData生成動畫了。
// 教程
//1.導(dǎo)出動畫

// 2.設(shè)置 .txt文件

// 3.導(dǎo)出文件到Unity中使用

控制動畫播放:
SkeletonAnimation skeletonAnimation; //gameobject的component。
Spine.AnimationState spineAnimationState = skeletonAnimation.state;
Spine.Skeleton skeleton;
spineAnimationState.SetAnimation(0, animationName, true);
切換動畫的bug:
由于spine在切換動畫的時候自動補(bǔ)償,用于動畫的平穩(wěn)過度。但是會導(dǎo)致殘影等bug,這時候需要在SetAnimation前調(diào)用
skeletonAnimation.skeleton.SetToSetupPose ();
spineAnimationState.ClearTracks ();
來消除前一個動畫的影響。
添加事件:
skeletonAnimation.state.Start:開始播放
skeletonAnimation.state.End:動畫被清除或者中斷
skeletonAnimation.state.Interrupt:動畫被打斷
skeletonAnimation.state.Complete:播放結(jié)束
skeletonAnimation.state.Event:用戶自定義事件
事件設(shè)置采用lambda表達(dá)式:
skeletonAnimation.state.Complete += (state, trackIndex,loopCount) => {
Debug.log("");
};
動態(tài)獲取slot的坐標(biāo):
Vector3 pos = skeletonAnimation.skeleton.FindSlot("hat_1").Bone.GetWorldPosition(transform);