- 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?
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                