小白求问,召唤大佬,Spine在导出到cocos后,层级只能按照节点的层级排序,不能使用spine制作时的层级吗?

spine当多个皮肤组合成一个人物时,某个皮肤里面的图片可能需要在两个层级显示,比如头发有前面的有后面的,制作spine时已经设置好了,但是早cc中使用只能按照节点层级排序,有解决办法吗

看看代码能添加slot? 或者美术提前预留slot ,往里设置图更换
可以看看这个,Creator3.x Spine局部换装支持使用图集

我问一下 多个皮肤组合成一个人物 你不会是通过加载多个骨架分别设置不同皮肤来实现的吧

是的是的,美术出成了这样的啊



图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有没有变动

image

目前看3.X这样写没有问题

测试效果和美术的预期一致吗 反正思路我觉得应该没啥问题

显示了一些不该显示的东西,哈哈

你应该用一个人物骨架,上面预留好需要替换部位,直接用setattachment 替换吧