コード例 #1
0
        /**
         * Generate map terrain
         */
        public void GenerateTerrain(LatLngObject mapMiddleMapPoint, Transform cameraTransform)
        {
            Vector3 mapMiddlePoint;

            //todo refactorovat tuhle podminku obecne u vsech middle pointu
            if (mapMiddleMapPoint.Equals(new LatLngObject()))
            {
                mapMiddlePoint = Vector3.zero;
                UiUtils.SetDefaultCameraPos(mapMiddlePoint, cameraTransform);
            }
            else
            {
                mapMiddlePoint = Converter.ConvertLatLngToXyz(mapMiddleMapPoint);
            }

            //create underground
            CreateUnderground(mapMiddlePoint);

            //create terrain
            var terrainGameObject = new GameObject("TerrainObj");

            terrainGameObject.AddComponent <Terrain>();
            terrainGameObject.AddComponent <TerrainCollider>();

            Terrain = terrainGameObject.GetComponent <Terrain>();
            var terrainData = new TerrainData
            {
                heightmapResolution = TerrainUtils.MapWidth,
                size = new Vector3(TerrainUtils.MapWidth, TerrainUtils.MapTopValue, TerrainUtils.MapHeight)
            };

            //load default or elevationAPI terrain
            float[,] heightsData = Main.Settings.TerrainToggle ? ConvertHeights() : GenerateHeightDemo();

            terrainData.SetHeights(0, 0, heightsData);
            Terrain.terrainData = terrainData;
            //odkomentovat jen, pokud je vyska terenu vetsi nez 0
//            terrainGameObject.GetComponent<TerrainCollider>().terrainData = terrainData;
            Terrain.materialType = Terrain.MaterialType.BuiltInLegacyDiffuse;
            AddTexture(Terrain.terrainData, Resources.Load <Texture2D>("Textures/grass_texture"));
            mapMiddlePoint.x -= TerrainUtils.MapWidth / 2;
            mapMiddlePoint.y  = -0.01f;
            mapMiddlePoint.z -= TerrainUtils.MapHeight / 2;
            terrainGameObject.transform.position = mapMiddlePoint;
        }
コード例 #2
0
        /**
         * Create trees on the terrain
         */
        public void GenerateTrees(LatLngObject middleMapPoint, List <TreeObject> trees)
        {
            Vector3 middleMapXyz;

            ConiferousTree = Resources.Load("3DObjects/Trees/Prefabs/Fir_Tree", typeof(GameObject)) as GameObject;
            LeafyTree      = Resources.Load("3DObjects/Trees/Prefabs/Poplar_Tree", typeof(GameObject)) as GameObject;
            //default position, if map does not contain any building or road
            if (middleMapPoint.Equals(new LatLngObject()))
            {
                middleMapXyz = Vector3.zero;
            }
            else
            {
                middleMapXyz = Converter.ConvertLatLngToXyz(middleMapPoint);
            }

            var         treeCount = Main.Settings.NumberOfTrees;
            const float treeScale = 0.06f;
            var         terrain   = TerrainRender.Get().Terrain;
            var         random    = new Random();

            //GENERATE RANDOM TREE POSITIONS
            if (trees.Count == 0)
            {
                for (var i = 0; i < treeCount; i++)
                {
                    var       decimalRandomPartX = random.NextDouble();
                    var       decimalRandomPartZ = random.NextDouble();
                    const int limitX             = (TerrainUtils.MapWidth / 2) - 2;
                    const int limitZ             = (TerrainUtils.MapHeight / 2) - 2;
                    var       randomX            = random.Next((int)(middleMapXyz.x - limitX), (int)(middleMapXyz.x + limitX));
                    // + 2 a + 1 kvuli korekcim umisteni na hranice terenu
                    var randomZ    = random.Next((int)(middleMapXyz.z - limitZ + 2), (int)(middleMapXyz.z + limitZ + 1));
                    var randomDecX = (float)(randomX + decimalRandomPartX);
                    var randomDecZ = (float)(randomZ + decimalRandomPartZ);
                    var randomPos  = new Vector3(randomDecX, 0, randomDecZ);
                    var terrainY   = terrain.SampleHeight(randomPos);
                    randomPos.y = terrainY;

                    var randNumberTree = random.Next(0, 2);
                    if (!IsPointInCollision(randomPos))
                    {
                        GameObject tree;
                        switch (randNumberTree)
                        {
                        case 0:
                            tree = Instantiate(LeafyTree);
                            break;

                        default:
                            tree = Instantiate(ConiferousTree);
                            break;
                        }

                        var treeTransform = tree.transform;
                        treeTransform.position   = randomPos;
                        treeTransform.localScale = new Vector3(treeScale, treeScale, treeScale);
                    }
                    else
                    {
                        --i;
                    }
                }
            }
            //CUSTOM TREE POSITIONS
            else
            {
                foreach (var currentTree in trees)
                {
                    var treePos = Converter.ConvertLatLngToXyz(currentTree.LatLngCoordinate);
                    //if tree is outside the map
                    if (TerrainUtils.IsObjectOutsideMap(treePos, middleMapXyz))
                    {
                        continue;
                    }

                    //set y position from terrain
                    var terrainY = terrain.SampleHeight(treePos);
                    treePos.y = terrainY;

                    var        randNumberTree = random.Next(0, 2);
                    GameObject tree;
                    switch (randNumberTree)
                    {
                    case 0:
                        tree = Instantiate(LeafyTree);
                        break;

                    default:
                        tree = Instantiate(ConiferousTree);
                        break;
                    }

                    var treeTransform = tree.transform;
                    treeTransform.position   = treePos;
                    treeTransform.localScale = new Vector3(treeScale, treeScale, treeScale);
                }
            }
        }