spine的局部换装问题

3.8版本的附件换装无法生效

代码如下

/**

  • 换装

  • @param skeleton Spine 组件

  • @param slotName 插槽名字

  • @param attachmentName 附件名字

  • @param skinName 皮肤名字
    */
    setAttachment(skeleton: sp.Skeleton, slotName: string, attachmentName: string, skinName: string | null = null): void {
    const skeletonData = skeleton.skeletonData!.getRuntimeData();
    if (!skeletonData) {
    throw new Error(skeletonData not found: ${skeleton.name});
    }
    // 从指定皮肤中,找到目标附件对象
    const skin = skinName ? skeletonData.findSkin(skinName) : skeletonData.defaultSkin;
    const slotIndex = skeletonData.findSlotIndex(slotName);
    const attachment = skin.getAttachment(slotIndex, attachmentName);

    // 找到目标插槽并替换为目标附件对象
    const slot = skeleton.findSlot(slotName);
    if (!slot) {
    throw new Error(slot not found: ${slotName});
    }
    slot.setAttachment(attachment);
    }

这个问题,以前提过,说是wasm版本没有这个功能。不知道哪个版本能解决。

我看官方有个接口setslottexture,设置槽位贴图,但是有很多问题,没法用

大佬解决了吗

3.8换装没问题吧

大佬你有实现过相关业务不,3d局部换装这种

3.8 用setSlotTexture 局部换装,切换动画之后,换装的位置 错乱了,出问题

大佬们, 有遇到一个附件换装问题吗, 同一个slot下两个attachment. 某些动画下需要K关键帧, 上一帧使用attachment1, 下一帧使用attachment2. 导致附件换装无效.

是不是开了cache?

可以局部换装的,但是不能new一个新的skin皮肤,而是使用已经有的皮肤去换装,
可以参考如下代码:
let defaultSkin = roleSpine._skeleton.data.findSkin(“default”);
let skinUp= roleSpine._skeleton.data.findSkin(upSkinName);
let skinDown = roleSpine._skeleton.data.findSkin(downSkinName);
defaultSkin.addSkin(skinUp);
defaultSkin.addSkin(skinDown);
roleSpine._skeleton.setSkin(defaultSkin);
roleSpine._skeleton.setSlotsToSetupPose();

1赞