public void FillMeshDivideMaterials(Transform transform, bool excludingChilds, bool destroyChildsFirst) { if (destroyChildsFirst) { destroyAllSubmeshContainer(transform); } if (!mC) { mC = transform.gameObject.GetComponent <MeshCollider>(); } if (!mF) { mF = transform.gameObject.GetComponent <MeshFilter>(); } if (!mR) { mR = transform.gameObject.GetComponent <MeshRenderer>(); } if (mC.sharedMesh != null) { mC.sharedMesh.Clear(); } mC.sharedMesh = null; if (mF.sharedMesh != null) { mF.sharedMesh.Clear(); } mR.materials = new Material[0]; if (excludingChilds) { tmpMaterialTriangles = materialTriangles; } else { tmpMaterialTriangles = CollectTriangles(); } foreach (KeyValuePair <Material, List <Triangle> > kV in tmpMaterialTriangles) { // IS THIS CORRECT?! WE MIGHT LOSE A TRIANGLE...SO BETTER CHECK IT AGAIN int i = 0; while (i < kV.Value.Count) { Transform submeshTransform = createSubmeshContainerGameobject(transform, this.name + "SubMesh" + kV.Key.name + i); ModularMesh submeshModularMesh = new ModularMesh(this, this.name + "SubMesh" + kV.Key.name + i); if (i + 21666 < kV.Value.Count) { submeshModularMesh.AddTriangles(kV.Value.GetRange(i, 21666), kV.Key); } else { submeshModularMesh.AddTriangles(kV.Value.GetRange(i, kV.Value.Count - i), kV.Key); } submeshModularMesh.FillMesh(submeshTransform, false); i += 21666; } } }