- Home /
C#, Creating a single mesh polygon problems
I'm trying to create a single polygon to fit each cell of a grid that is generated, But whenever I try to create it, it returns with:
The script:
void UpdateMesh(GameObject obj)
{
float halfX = cellBounds.x / 2, halfZ = cellBounds.z / 2;
Debug.Log("b: " + cellBounds + " -- TL:" + new Vector3(0 - halfX, 0, 0 - halfZ) + "-- BL: " + new Vector3(0 + halfX, 0, 0 - halfZ) + "-- BR: " + new Vector3(0 + halfX, 0, 0 + halfZ) + "-- TR: " + new Vector3(0 - halfX, 0, 0 + halfZ));
MeshFilter mesh = gameObject.GetComponent<MeshFilter>();
Vector3[] vertices = { new Vector3(0 - halfX, 0, 0 - halfZ), new Vector3(0 + halfX, 0, 0 - halfZ), new Vector3(0 + halfX, 0, 0 + halfZ), new Vector3(0 - halfX, 0, 0 + halfZ)};
int[] triangles = { 0, 3, 2, 2, 1, 0 };
mesh.mesh.vertices = vertices;
mesh.mesh.triangles = triangles;
mesh.mesh.RecalculateNormals();
}
Answer by _dns_ · Feb 10, 2014 at 04:05 PM
Hi,
It may be because you need to start with a clean new mesh for your meshfilter:
Mesh mesh = gameObject.GetComponent<MeshFilter>().mesh;
Then use mesh.Clear(); to tell Unity to start from an empty mesh
Then assign vertices and triangles
You can also start with a:
Mesh mesh = new Mesh();
assign vertices & triangles
then assign it to the meshfilter:
gameObject.GetComponent<MeshFilter>().mesh = mesh;
Answer by robertbu · Feb 10, 2014 at 04:19 PM
You are reusing an existing MeshFilter. You will get this error if the triangles in the original mesh refer to indices beyond four. If you are sure the original mesh has more than four vertices, you can reverse the order and set the triangles first to solve this problem (or better yet clear the triangles before assigning the vertices).
Robert, it's not the number of triangles, it's the triangle indices themselves. If the original mesh had 10 vertices and the new one has 4, the triangle indices will be out of bounds for the vertex array. The solution is clearing the triangle array before assigning the vertices, or clearing the whole mesh as dns said.
@AlkisFortuneFish - you are absolutely right. I edited my answer. Thanks.
Your answer
Follow this Question
Related Questions
Replace MeshFilter mesh by a other mesh in Editor 1 Answer
Switching mesh through Mesh Filter C# 2 Answers
How do i replace a Mesh Filter?? 1 Answer
Selecting a single polygon / face at runtime 1 Answer
Mesh texture not properly rendered 0 Answers