spine 的運(yùn)行庫(kù): https://github.com/EsotericSoftware/spine-runtimes
筆者在使用spine 時(shí)遇到的一些問(wèn)題,這里基本上你也許會(huì)遇到:下面是 yizhangxyz的博客 的博客。
可以使用spine制作骨骼動(dòng)畫來(lái)給unity使用。spine提供了unity運(yùn)行包前鹅。運(yùn)行包的版本一定要和spine版本一致,不然會(huì)報(bào)錯(cuò)掌腰。
導(dǎo)入spine動(dòng)畫:
由spine導(dǎo)出的動(dòng)畫文件有3個(gè):xx.atlas,xx.json,xx.png楷掉。將這三個(gè)文件直接導(dǎo)入unity會(huì)報(bào)錯(cuò),將xx.atlas改為xx.atlas.txt理疙,這時(shí)會(huì)自動(dòng)生成xx_Atlas.asset,xx_Material.mat晕城。然后在unity里面create spine SkeletonData,指定xx_Atlas.asset和xx.json窖贤。就可以用SkeletonData生成動(dòng)畫了砖顷。
// 教程
//1.導(dǎo)出動(dòng)畫
// 2.設(shè)置 .txt文件
// 3.導(dǎo)出文件到Unity中使用
控制動(dòng)畫播放:
SkeletonAnimation skeletonAnimation; //gameobject的component。
Spine.AnimationState spineAnimationState = skeletonAnimation.state;
Spine.Skeleton skeleton;
spineAnimationState.SetAnimation(0, animationName, true);
切換動(dòng)畫的bug:
由于spine在切換動(dòng)畫的時(shí)候自動(dòng)補(bǔ)償赃梧,用于動(dòng)畫的平穩(wěn)過(guò)度滤蝠。但是會(huì)導(dǎo)致殘影等bug,這時(shí)候需要在SetAnimation前調(diào)用
skeletonAnimation.skeleton.SetToSetupPose ();
spineAnimationState.ClearTracks ();
來(lái)消除前一個(gè)動(dòng)畫的影響授嘀。
添加事件:
skeletonAnimation.state.Start:開(kāi)始播放
skeletonAnimation.state.End:動(dòng)畫被清除或者中斷
skeletonAnimation.state.Interrupt:動(dòng)畫被打斷
skeletonAnimation.state.Complete:播放結(jié)束
skeletonAnimation.state.Event:用戶自定義事件
事件設(shè)置采用lambda表達(dá)式:
skeletonAnimation.state.Complete += (state, trackIndex,loopCount) => {
Debug.log("")物咳;
};
動(dòng)態(tài)獲取slot的坐標(biāo):
Vector3 pos = skeletonAnimation.skeleton.FindSlot("hat_1").Bone.GetWorldPosition(transform);