spine使用图集旋转问题

引擎3.6,用了官方的外部换装案例,加以修改支持spriteframe,论坛那个2.4.7spine图集参考后,我在原有的官方的这个案例上修改支持了一波sf,部分正常:
散图默认向左边,图集如果是向左边没问题。
异常:
如果导出的图集里是的某个散图顺时针旋转了90度,相当于spine旋转了270度。经过我的算法,游戏表现是图的头尾没旋转对。。看不懂uvs这块怎么改。
/**

 * 局部换装

 */

public changeSlotSkin (slotName: string, sp: SpriteFrame) {

    const slot = this.findSlot(slotName);

    if (!slot) return;

    let attachment = slot.getAttachment();

    if (!attachment) return;

    const isMesh = attachment instanceof spine.MeshAttachment;

    const isRegion = attachment instanceof spine.RegionAttachment;

    if (!isMesh && !isRegion) return;

    attachment = slot.getAttachment().copy();

    attachment.name = 'xxx';

    let regionInfo = this.makeRegionIno(sp,'');



    let texture = regionInfo.texture;

    let rect = regionInfo.rect

    let origSize = regionInfo.origSize

    let offset = regionInfo.offset

    let degrees = regionInfo.degrees



    const skelTex = new SkeletonTexture({ width: texture.width, height: texture.height } as ImageBitmap);

    skelTex.setRealTexture(texture);

    // const region = new spine.TextureAtlasRegion();

    let region = attachment.region;

    // region.u = 0;

    // region.v = 0;

    // region.u2 = 1;

    // region.v2 = 1;

    region.texture = skelTex;

    region.renderObject = region;

    // region.page = attachment.region.page;

    region.x = rect.x

    region.y = rect.y

    region.width = rect.width

    region.height = rect.height

    region.originalWidth = origSize.width

    region.originalHeight = origSize.height

    region.offsetX = offset.x

    region.offsetY = offset.y



    region.rotate = degrees != 0

    region.degrees = degrees



    if (region.rotate){

        region.u = rect.x / texture.width

        region.v = rect.y / texture.height

        region.u2 = (rect.x + rect.height) / texture.width

        region.v2 = (rect.y + rect.width) / texture.height

    } else{

        region.u = rect.x / texture.width

        region.v = rect.y / texture.height

        region.u2 = (rect.x + rect.width) / texture.width

        region.v2 = (rect.y + rect.height) / texture.height

    }

    attachment.width = rect.width;

    attachment.height = rect.height;

    if (isMesh) {

        attachment.updateUVs()

    } else if (isRegion) {

        let uvs = attachment.uvs;

        if (region.degrees == 90 ) {

            uvs[2] = region.u;

            uvs[3] = region.v2;

            uvs[4] = region.u;

            uvs[5] = region.v;

            uvs[6] = region.u2;

            uvs[7] = region.v;

            uvs[0] = region.u2;

            uvs[1] = region.v2;

        } else if (region.degrees == 270) {

            uvs[6] = region.u;

            uvs[7] = region.v2;

            uvs[0] = region.u;

            uvs[1] = region.v;

            uvs[2] = region.u2;

            uvs[3] = region.v;

            uvs[4] = region.u2;

            uvs[5] = region.v2;

        } else {

            uvs[0] = region.u;

            uvs[1] = region.v2;

            uvs[2] = region.u;

            uvs[3] = region.v;

            uvs[4] = region.u2;

            uvs[5] = region.v;

            uvs[6] = region.u2;

            uvs[7] = region.v2;

        }

        attachment.setRegion(region);

        attachment.updateOffset()

    }

    slot.setAttachment(attachment);

}

makeRegionIno(frame: SpriteFrame, key: string): regionInfo {

    let texture = frame.texture;

    let rect = frame.rect;

    let origSize = frame.originalSize;

    let offset = frame.offset;

    let rotate = frame.rotated;



    let info: regionInfo = {

        key: key,

        rect: rect,

        origSize: origSize,

        offset: v2(

            (origSize.width - rect.width) * 0.5 + offset.x,

            (origSize.height - rect.height) * 0.5 + offset.y

        ),

        degrees: rotate ? 270 : 0,

        texture: texture,

    }

    return info

}