spine当多个皮肤组合成一个人物时,某个皮肤里面的图片可能需要在两个层级显示,比如头发有前面的有后面的,制作spine时已经设置好了,但是早cc中使用只能按照节点层级排序,有解决办法吗
我问一下 多个皮肤组合成一个人物 你不会是通过加载多个骨架分别设置不同皮肤来实现的吧
是的是的,美术出成了这样的啊
图1是spine里在皮肤视图里固定多个皮肤预览的效果
图2是我刚写的代码和cocos里跑出来的效果
export function changeAttachsBySkin(skeleton: sp.Skeleton, skinName: string) {
//获取骨骼实例
let skel: sp.spine.Skeleton = skeleton._skeleton;
if (!skel.skin) skel.skin = skel.data.defaultSkin; //实际测试发现有点小bug 加了这两行代码才正常
//获取骨骼数据
let skeletonData: sp.spine.SkeletonData = skel.data;
//获取骨骼皮肤
let skin: sp.spine.Skin = skeletonData.findSkin(skinName);
//获取皮肤附件
for (let { slotIndex, name: slotName, attachment: attach } of skin.getAttachments()) {
skel.skin.setAttachment(slotIndex, slotName, attach); //实际测试发现有点小bug 加了这两行代码才正常
//获取骨骼插槽
let slot: sp.spine.Slot = skel.slots[slotIndex];
//替换皮肤附件
slot.setAttachment(attach);
}
}
原理其实就是不要用setSkin 因为这个api会替换所有插槽 重复调用只会替换为最后一个皮肤的插槽附件
skin其实就是一个插槽映射附件的map setSkin帮我们一次性setAttachment了而已
我的做法是到骨骼数据里拿到皮肤数据 里面有插槽信息和皮肤下的插槽附件 然后拿到插槽 自己手动替换插槽附件
1赞
直接换slot附件,真方便
这个对引擎版本有要求吗?我在3.5用不了
我用的2.x 应该大差不差吧 你看下api有没有变动
测试效果和美术的预期一致吗 反正思路我觉得应该没啥问题
显示了一些不该显示的东西,哈哈
你应该用一个人物骨架,上面预留好需要替换部位,直接用setattachment 替换吧