(mesh related) code that works in Unity 3.5 does not work in 4.3

The following code was written in Unity 3.5 and worked back then (and still does in 3.5),
but I tested it in Unity 4.3 and it no longer works correctly.

        List<edge> borderedges = new List<edge>();
        List<bool> unique = new List<bool>();
        for (int i = 0; i < edges.Count; i++)
        {
            unique.Add(true);
        }
        for (int edgeIndex = 0; edgeIndex < edges.Count; edgeIndex++)
        {
            if (unique[edgeIndex])
            {
                for (int i = edgeIndex + 1; i < edges.Count - 1; i++)
                {
                    if (edges_.a == edges[edgeIndex].b && edges*.b == edges[edgeIndex].a)*_

{
unique[edgeIndex] = false;
unique = false;
break;
}
}
}
}
for (int edgeIndex = 0; edgeIndex < edges.Count; edgeIndex++)
{
if (unique[edgeIndex])
borderedges.Add(edges[edgeIndex]);
}
I can’t see anything that could be wrong, or anything that could cause it to behave differently in Unity 3.5 than 4.
some info about the code:
it’s part of a function that looks for border-edges (edges that are each only part of a single triangle). an “Edge” is simply a struct with 2 ints, a and b, which are vertices indices.
I tested it on a simple square (2 triangles), and in 3.5 it correctly says the mesh has:
- 4 vertices
- 2 triangles
- 6 edges
- 4 borderedges
yet in 4.3 it says the mesh has:
- 4 vertices
- 2 triangles
- 6 edges
- 6 borderedges
so all edges are considered unique for some reason in this case. (for some other meshes it works, but clearly not on all)

1 Answer

1

well, found it, the 2nd for loop only goes till “i < edges.Count - 1”, for some reason,
it should be “i < edges.Count”, which fixes the issue.

it’s still a mystery to me why it did work in 3.5 though,
hm, wait, I guess the order of the vertices must have been different, and this problem ofcourse only becomes visible when the last edge is not a border-edge (which explains why it wasn’t always wrong)