Пример #1
0
 public static void CacheSpriteMesh(int spriteId, Mesh mesh)
 {
     if (!SpriteMeshDic.ContainsKey(spriteId))
     {
         SpriteMeshDic.Add(spriteId, mesh);
     }
 }
Пример #2
0
    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);
    }