- 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