Ejemplo n.º 1
0
    private void RegenerateMesh(bool reverse = false)
    {
        List <bVertex> newBVertices = new List <bVertex>();

        int[] newbTriangles = new int[triangles.ActiveCount * 3];

        vertices.CopyActiveTo(newBVertices);

        Vector3[] newVertices = new Vector3[newBVertices.Count];
        Vector2[] newUV       = new Vector2[newBVertices.Count];

        int ind = 0;

        foreach (bVertex v in newBVertices)
        {
            newVertices[ind] = v.vertex;
            newUV[ind]       = v.uv;

            ind++;
        }

        ActiveNode <bTriangle> it = triangles.GetRootNode().nextActiveNode;

        ind = 0;
        while (!it.isRootNode)
        {
            newbTriangles[ind]     = it.data.GetNode(0).activeIndex;
            newbTriangles[ind + 1] = it.data.GetNode(1).activeIndex;
            newbTriangles[ind + 2] = it.data.GetNode(2).activeIndex;

            it   = it.nextActiveNode;
            ind += 3;
        }

        /*
         * if (!reverse)
         * {
         *  targetMesh.SetVertices(newVertices);
         *  targetMesh.SetbTriangles(newbTriangles, 0);
         * }
         * else
         * {
         *  targetMesh.SetbTriangles(newbTriangles, 0);
         *  targetMesh.SetVertices(newVertices);
         * }
         */
        targetMesh.Clear();
        targetMesh.vertices  = newVertices;
        targetMesh.uv        = newUV;
        targetMesh.triangles = newbTriangles;

        targetMesh.RecalculateNormals();
        targetMesh.RecalculateTangents();
        targetMesh.RecalculateBounds();

        if (targetMeshCollider != null)
        {
            targetMeshCollider.sharedMesh = targetMesh;
        }
    }