- Home /
Need Help with Dynamically Building a Mesh
I am working on a project where a game-grid is produced in the Start() call of the script as a large mesh. I am building it this way as the final game-grid can have a total of 1000 spaces, and I am attempting to make use of the combined mesh functionality in Unity to reduce the draw calls from 1x draw-call per mesh to 1x draw-call for the entire mesh (as each grid-space uses the same material).This mesh will then get drawn on each Update call using the Graphics.DrawMesh function. I believe I have everything setup correctly, however the result is nothing renders to the screen. I could use some advice as to what I may be missing.
Here is the code that build's the game-grid mesh:
void AssembleGameGrid()
{
Vector3 gridSpaceLocation = new Vector3(0.0f,0.0f,0.0f);
int gridBlockCount = 0;
Matrix4x4[] transformGridDrawArray = new Matrix4x4[1000];
Mesh[] meshGridDrawArray = new Mesh[1000];
for(int x = 0; x < 100; x++)
{
for(int y = 0; y < 100; y++)
{
if(gridConstruction[x,y])
{
gridSpaceLocation.x = transform.position.x + (gridSpaceSize * x) + (gridSpaceSize / 2.0f);
gridSpaceLocation.y = transform.position.y + -(gridSpaceSize * y) - (gridSpaceSize / 2.0f);
Matrix4x4 newBlock = new Matrix4x4();
newBlock.SetTRS(gridSpaceLocation, Quaternion.identity, new Vector3(gridSpaceSize,gridSpaceSize,0.0f));
transformGridDrawArray[gridBlockCount] = newBlock;
meshGridDrawArray[gridBlockCount] = new Mesh();
gridBlockCount += 1;
}
}
}
CombineInstance[] combine = new CombineInstance[gridBlockCount];
for (int i = 0; i < gridBlockCount; i++)
{
Mesh newGridBlock = new Mesh();
combine[i].mesh = newGridBlock;
combine[i].transform = (Matrix4x4)transformGridDrawArray[i];
}
Mesh combinedMesh = new Mesh();
combinedMesh.CombineMeshes(combine);
gameGridMesh = combinedMesh;
}
And then to render it in each Update() call, I'm using the following command: Graphics.DrawMesh(gameGridMesh, Vector3.zero, Quaternion.identity, gridSpaceMaterialBlank, 0);
Any advice would be greatly appreciated!
what the point of this loop: "for (int i = 0; i < gridBlockCount; i++) "? you just instantiate a bunch of empty meshes and then combine them? Shouldn't you generate or use imported meshes?