/** * Create new GameObject, part of a building * triangleType = 0 => generate triangles via Triangulator for roofs * = 1 => generate optimized triangles for walls = only two triangles is enough for 4 wall points * = 2 => generate triangles for 4 point roofs */ private void CreateGameObject(string buildingName, Vector3[] edges, int triangleType) { var gameObjectArea = new GameObject(buildingName); #if UNITY_EDITOR const StaticEditorFlags flags = StaticEditorFlags.BatchingStatic | StaticEditorFlags.LightmapStatic; GameObjectUtility.SetStaticEditorFlags(gameObjectArea, flags); #endif var meshFilter = (MeshFilter)gameObjectArea.AddComponent(typeof(MeshFilter)); var mesh = meshFilter.mesh; mesh.Clear(); mesh.vertices = edges; //fill area with triangles int[] triangles = triangleType != 0 ? GenerateTrianglesFor4Points() : Triangulator.GenerateTriangleNewVersion(edges.ToList()); mesh.triangles = triangles; mesh.RecalculateNormals(); mesh.RecalculateBounds(); #if UNITY_EDITOR MeshUtility.Optimize(mesh); #endif ChangeBuildingSurfaceColor(gameObjectArea, ColorUtils.DefaultBuilding); BatchedBuildings.Add(gameObjectArea); }