Spine图集动态加载

spine导出资源图集过多,不想全部加载,只想加载当前使用的图集,减少内存消耗。
实现流程和spine使用外部图片换装差不多

1、使用占位图片(比如10*10像素的透明图)替换spine默认图集
2、在setSkinsetAttachment的时候根据attachment.region.page.name找到对应的图集名字
3、加载对应的图集资源
4、替换attachment的texture,并重新计算uv。参考代码如下

setAttachmentAtlasTexture(attachment, atlasTexture) {
        if (attachment && attachment.region && atlasTexture) {
            let region = attachment.region
            region.page.texture.setRealTexture(atlasTexture)
            region.page.width = atlasTexture.width
            region.page.texture._image.width = atlasTexture.width
            region.page.height = atlasTexture.height
            region.page.texture._image.height = atlasTexture.height
            let isMesh = attachment instanceof sp.spine.MeshAttachment
            let isRegion = attachment instanceof sp.spine.RegionAttachment
            region.u = region.x / atlasTexture.width
            region.v = region.y / atlasTexture.height
            if (region.rotate) {
                region.u2 = (region.x + region.height) / atlasTexture.width;
                region.v2 = (region.y + region.width) / atlasTexture.height;
            }
            else {
                region.u2 = (region.x + region.width) / atlasTexture.width;
                region.v2 = (region.y + region.height) / atlasTexture.height;
            }
            if (isMesh) {
                attachment.updateUVs()
            }
            if (isRegion) {
                attachment.setRegion(region)
                attachment.updateOffset()
            }
        }
    },
3赞