- Home /
 
 
               Question by 
               riccardokhm · Dec 26, 2020 at 12:11 PM · 
                meshmeshesmeshfiltermergecombinemeshes  
              
 
              Merging meshes
Hi Everyone, i'm trying to merge meshes with different material on a single mesh with different submeshes associated: every mesh i try to merge is considered as a single submesh of the new generated gameobject, each with the original material. Here my code:
     public void Merge(GameObject[] gameObjects, string Name)
     {
         if (gameObjects.Length == 0) return;
         Material[] materials;
         MeshFilter[] meshFilters = new MeshFilter[gameObjects.Length];
         MeshRenderer[] meshRenderers = new MeshRenderer[gameObjects.Length];
         Mesh combinedMesh = new Mesh();
         combinedMesh.subMeshCount = gameObjects.Length;
         int size = 0;
         for (int i = 0; i < gameObjects.Length; i++)
         {
             meshFilters[i] = gameObjects[i].GetComponent<MeshFilter>();
             meshRenderers[i] = gameObjects[i].GetComponent<MeshRenderer>();
             size = meshRenderers[i].sharedMaterials.Length + size;
         }
         materials = new Material[size];
         CombineInstance[] combine = new CombineInstance[gameObjects.Length];
        
         for (int i = 0; i < gameObjects.Length; i++)
         {
             int j;
             if (i == 0)
             {
                 j = 0;
             }
             else
             {
                 j = meshRenderers[i - 1].sharedMaterials.Length;
             }
             combine[i].subMeshIndex = i;
             combine[i].mesh = meshFilters[i].sharedMesh;                
             combine[i].transform = meshFilters[i].transform.localToWorldMatrix;
             for (int k = 0; k < meshRenderers[i].sharedMaterials.Length; k++)
             {
                 materials[j + k] = meshRenderers[i].sharedMaterials[k];
             }
            
         }
         
         combinedMesh.CombineMeshes(combine);
         AssetDatabase.CreateAsset(combinedMesh, "Assets/" + Name + ".asset");
         GameObject combinedObject = new GameObject(Name);
         var filter = combinedObject.AddComponent<MeshFilter>();
         filter.sharedMesh = combinedMesh;
         var renderer = combinedObject.AddComponent<MeshRenderer>();
         renderer.sharedMaterials = materials;
     }
     #endregion
 
               unfortunately i'm not able to have the final gameobject with all the preexisting materials of each mesh to merge: could someone help me in this? Thanks a lot,
               Comment
              
 
               
              Your answer
 
             Follow this Question
Related Questions
Gather all the Meshes into 1 1 Answer
Combine meshes? 1 Answer
CombineMeshes result invisible. 0 Answers
Mesh between lines - Mesh.SetIndices 1 Answer
Mesh coloring isnt working 1 Answer