public CombinedModel ProcessCluster(MeshRenderer[] allRenderers, Dictionary <MeshRenderer, bool> lowLODLevels) { List <MeshFilter> allFilters = new List <MeshFilter>(allRenderers.Length); int sumVertexLength = 0; int sumTriangleLength = 0; for (int i = 0; i < allRenderers.Length; ++i) { if (!lowLODLevels.ContainsKey(allRenderers[i])) { MeshFilter filter = allRenderers[i].GetComponent <MeshFilter>(); if (filter.sharedMesh == null) { Debug.LogError("存在没有Mesh的物件:" + allRenderers[i].transform.name); } allFilters.Add(filter); sumVertexLength += (int)(filter.sharedMesh.vertexCount * 1.2f); } } sumTriangleLength = (int)(sumVertexLength * 1.5); NativeList <Point> points = new NativeList <Point>(sumVertexLength, Allocator.Temp); NativeList <int> triangleMaterials = new NativeList <int>(sumVertexLength / 3, Allocator.Temp); VirtualMaterial vm = new VirtualMaterial(); Dictionary <Material, int> Mat2Index = vm.GetMaterialsData(allRenderers, resPath); for (int i = 0; i < allFilters.Count; ++i) { Mesh mesh = allFilters[i].sharedMesh; GetPoints(points, mesh, allFilters[i].transform, allRenderers[i].sharedMaterials, Mat2Index); } float3 less = points[0].vertex; float3 more = points[0].vertex; for (int i = 1; i < points.Length; ++i) { float3 current = points[i].vertex; if (less.x > current.x) { less.x = current.x; } if (more.x < current.x) { more.x = current.x; } if (less.y > current.y) { less.y = current.y; } if (more.y < current.y) { more.y = current.y; } if (less.z > current.z) { less.z = current.z; } if (more.z < current.z) { more.z = current.z; } } float3 center = (less + more) / 2; float3 extent = more - center; Bounds b = new Bounds(center, extent * 2); CombinedModel md; md.bound = b; md.allPoints = points; md.allMatIndex = triangleMaterials; md.vm = vm; return(md); }