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衣服的碎片):
看起来他只有左下角,只有四分之一。我不知道为什么。