public static void CacheSpriteMesh(int spriteId, Mesh mesh) { if (!SpriteMeshDic.ContainsKey(spriteId)) { SpriteMeshDic.Add(spriteId, mesh); } }
public static Mesh CreateSpriteMesh(CocoSpritaMeta meta, Texture tex) { Mesh mesh; if (!SpriteMeshDic.TryGetValue(meta.id, out mesh)) { mesh = new Mesh(); var vert = new Vector3[4]; vert[0] = new Vector3(meta.screen[0] / 16, -meta.screen[1] / 16, 0); vert[1] = new Vector3(meta.screen[2] / 16, -meta.screen[3] / 16, 0); vert[2] = new Vector3(meta.screen[4] / 16, -meta.screen[5] / 16, 0); vert[3] = new Vector3(meta.screen[6] / 16, -meta.screen[7] / 16, 0); mesh.vertices = vert; var tri = new int[6]; tri[0] = 0; tri[1] = 3; tri[2] = 1; tri[3] = 2; tri[4] = 1; tri[5] = 3; mesh.triangles = tri; var normals = new Vector3[4]; normals[0] = -Vector3.forward; normals[1] = -Vector3.forward; normals[2] = -Vector3.forward; normals[3] = -Vector3.forward; mesh.normals = normals; Vector2[] uv = new Vector2[4]; uv[0] = new Vector2(meta.src[0] / tex.width, 1 - meta.src[1] / tex.height); // 0 uv[1] = new Vector2(meta.src[2] / tex.width, 1 - meta.src[3] / tex.height); // 1 uv[2] = new Vector2(meta.src[4] / tex.width, 1 - meta.src[5] / tex.height); // 2 uv[3] = new Vector2(meta.src[6] / tex.width, 1 - meta.src[7] / tex.height); // 3 mesh.uv = uv; mesh.RecalculateBounds(); CacheSpriteMesh(meta.id, mesh); } return(mesh); }