Cocos 2.x Spine 骨骼换装修改 UUID 导致内存飙升 / 游戏卡顿,求优化方案

各位大佬好,我在做 Cocos 2.x 版本的 Spine 骨骼换装功能时遇到了内存和性能问题,想请教下优化思路。

为了实现不同角色换装时互不影响,我通过修改 SkeletonData 的 UUID 来隔离每个角色的骨骼数据,核心代码如下:
loadCharacterSpine(characterNode, uuid) {
let resAry = GameDataCenter.skeletonData;
let character = characterNode.getComponent(sp.Skeleton);
let _key = uuid + “_renwuCache”;
asset = new sp.SkeletonData();
asset._uuid = _key;
asset.skeletonJson = resAry.skeletonJson;
asset.atlasText = resAry.atlasText;
asset.textures = resAry.textures;
asset[‘textureNames’] = resAry.textureNames;
character.skeletonData = asset;
},
这种方式虽然能解决换装相互影响的问题,但每创建一个角色就会复制一份 SkeletonData 实例(包含骨骼数据、贴图等),导致:

  1. 内存占用随角色数量线性增长;

  2. 角色数量较多时出现明显的游戏卡顿、掉帧;

  3. 长时间运行后甚至会触发内存溢出。

  4. 除了修改 UUID 复制 SkeletonData 的方式,还有什么方法能实现 “不同角色换装互不影响” 的需求?

  5. 如果必须保留 UUID 隔离的思路,有没有办法复用 SkeletonData 的核心数据(比如贴图、骨骼配置),只隔离换装相关的状态,避免重复占用内存?

  6. 针对 Cocos 2.x 的 Spine 骨骼,有没有官方 / 社区验证过的 “低内存占用” 换装最佳实践?