public static string IntegrateSubmeshes(this Mesh mesh) { var before = mesh.Submeshes.Count; // 同じMaterialのMeshが連続するようにIndexを並べ替える var sorted = new List <Submesh>(); var source = mesh.Submeshes.ToList(); // copy while (source.Any()) { var first = source[0]; source.RemoveAt(0); sorted.Add(first); sorted.AddRange(source.Where(x => x.Material == first.Material)); // 同じMaterialを追加 source.RemoveAll(x => x.Material == first.Material); // 同じMaterialを削除 } // Submeshを並べ替えて連続するものを連結する mesh.ReorderSubmeshes(sorted); return($"({before} => {mesh.Submeshes.Count})"); }