我使用的SPINE是3.8.99,项目当中SPINE需要使用特别多,网上都千篇一律,找不到一些实际遇到的问题,下面都是我遇到的一些稀奇古怪的问题。
1.SPINE导入U3D,拖到场景里,可以选择创建为2D或者UGUI组件,2D是SkeletonAnimation组件,UGUI是SkeletonGraphic。
这两个的主要区别是,如果SPINE的图片有多张,比如序列帧这种, SkeletonGraphic就必须勾选Multiple CanvasRenderers,否则会报错。
但是,这样处理以后还有个问题,在第一帧的时候会跳帧,播放空白帧,原因是勾选自动播放后Renderer0这些子物体下的RawImage是空白,必须手动播放,而且在播放前要重置数据。
transform.Find("bg").GetComponent<SkeletonGraphic>().Skeleton.SetToSetupPose();
transform.Find("bg").GetComponent<SkeletonGraphic>().AnimationState.SetAnimation(0, "animation", true);
2.动画播放出现问题,和SPINE不一样,是因为SPINE默认有补间动画,不知道怎么取消,没找到,需要在播放前重置数据,清理播放通道。
transform.Find("bg").GetComponent<SkeletonGraphic>().AnimationState.ClearTracks();
transform.Find("bg").GetComponent<SkeletonGraphic>().Skeleton.SetToSetupPose();
transform.Find("bg").GetComponent<SkeletonGraphic>().AnimationState.SetAnimation(0, "animation", true);
3.纸娃娃系统,武器和装备装配这些,可以设置皮肤和设置附件,但是有个问题,因为每次播放动画前都要重置到绑定数据,皮肤会丢失,需要再次设置一下皮肤,我没找到更好的办法,如果有,给我留言。
body.skeleton.SetSkin("衣服/" + id);
body.skeleton.SetAttachment("jian", "jian/" + wuQi.Name);
5.一个SPINE动画是可以同时播放好几个这个SPINE上的动画的,默认通道是0,播放的时候,填不同的通道就行了。
6.SPINE文件导出不用JSON,用skel二进制,速度快很多,解析文件也小,具体网上找。
7.U3D里可以获取到SPINE动画ROOT骨骼位置的。
transform.Find("bg").GetComponent<SkeletonGraphic>().Skeleton.RootBone.GetLocalPosition();
8.skeleton root motion这个组件可以留意研究一下,里面有刚体的一些设置,目前没这方面的需求,所以我没研究。
9.API的调用,尽量和SkeletonGraphic一致,否者你两者混用,会有点晕。
比如SkeletonGraphic,只能用AnimationState.Complete。
但是SkeletonAnimation,可以用AnimationState.Complete,也能用state.Complete。
如果再遇到比较阿格里的问题,我再来更新。