예제 #1
0
        /**
         * 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);
        }