Spine版本3.8xx
我的Unity项目中的角色可以换装。并且工程内Assets文件夹下所有供给角色的衣服图片,都是可读写的,使用GetRepackedSkin时角色换装正常。
但现在我收到一个需求,app在运行时玩家自己创建服装图片(这些图片是放在可读写路径下,并不是Asssets文件夹下),类似DIY的功能。我尝试通过路径加载这个图片,并且设置可读写后。使用GetRepackedSkin角色换装异常。
我尝试了不使用GetRepackedSkin方法,所有的服装都是以碎片的形式穿在角色身上,显示是正常的。但这样DrawCall会非常高,代价是昂贵的。
我是通过下面这个函数加载Texture2D,通过这个Texture2D创建的精灵。
public static Texture2D load_texture_from_file(this GameObject obj,string path,bool readwrite = false,bool mipchain = false,bool liner = true)
    {
        if (!File.Exists(path))
        {
            return null;
        }
        byte[] bytes = File.ReadAllBytes(path);
        Texture2D tex = new Texture2D(0, 0, TextureFormat.RGBA32, false,true);
        tex.name = path;
        tex.LoadImage(bytes);
        if (readwrite)
        {
            RenderTexture renderTex = RenderTexture.GetTemporary(tex.width,tex.height,0, RenderTextureFormat.ARGB32,RenderTextureReadWrite.Linear);
            Graphics.Blit(tex, renderTex);
            RenderTexture previous = RenderTexture.active;
            RenderTexture.active = renderTex;
            Texture2D readableText = new Texture2D(tex.width, tex.height, TextureFormat.RGBA32, mipchain, liner);
            readableText.name = path+"_rw";
            readableText.ReadPixels(new Rect(0, 0, renderTex.width, renderTex.height), 0, 0);
            readableText.Apply();
            RenderTexture.active = previous;
            RenderTexture.ReleaseTemporary(renderTex);
            return readableText;
        }
        bytes = null;
        return tex;
    }
下图是当我使用GetRepackedSkin方法时,运行期间渲染角色时的材质图片(红色区域是DIY衣服的碎片):

看起来他只有左下角,只有四分之一。我不知道为什么。