예제 #1
0
 public void UpdateNeighbors()
 {
     if (Terrain != null)
     {
         var xDown = Neighborhood.XDown == null ? null : Neighborhood.XDown.Terrain;
         var xUp   = Neighborhood.XUp == null ? null : Neighborhood.XUp.Terrain;
         var zDown = Neighborhood.ZDown == null ? null : Neighborhood.ZDown.Terrain;
         var zUp   = Neighborhood.ZUp == null ? null : Neighborhood.ZUp.Terrain;
         Terrain.SetNeighbors(xDown, zUp, xUp, zDown);
         Terrain.Flush();
     }
 }
예제 #2
0
        //NOT Threaded (Can it be?)
        //TODO: Cleanup this and seperate functionality out.
        public void CreateTerrain()
        {
            GameController GameController = GameController.GetSharedInstance();
            int            randVal        = GameController.BaseSeed * Mathf.Abs(Position.X) * Mathf.Abs(Position.Z);

            Random.InitState(randVal);
            var x = Random.value + Random.value + Random.value;

            //Debug.Log("Chunk["+Position.X+","+Position.Z+"].CreateTerrain()");
            Data = new TerrainData();
            Data.heightmapResolution = Settings.HeightmapResolution;
            Data.alphamapResolution  = Settings.AlphamapResolution;
            Data.SetHeights(0, 0, Heightmap);
            ApplyTextures(Data);
            //yield return 0;

            // GRASS ADDING
            Data.size = new Vector3(Settings.Length, Settings.Height, Settings.Length);
            AddDetailGrass(Data);
            //yield return 0;
            GameObject newTerrainGameObject = Terrain.CreateTerrainGameObject(Data);

            newTerrainGameObject.name = "Chunk: [" + Position.X + ", " + Position.Z + "]";

            //slightly shift edge chunks up, theyre off due to bilinear interpolation floating point errors
            float yPos = (this.EdgeType != ChunkEdge.NotEdge) ? 0.1f : 0.0f;

            newTerrainGameObject.transform.position = new Vector3(Position.X * Settings.Length, yPos, Position.Z * Settings.Length);
            newTerrainGameObject.tag = "Terrain";

            Terrain = newTerrainGameObject.GetComponent <Terrain>();
            Terrain.heightmapPixelError  = 8;
            Terrain.materialType         = UnityEngine.Terrain.MaterialType.Custom;
            Terrain.materialTemplate     = Settings.TerrainMaterial;
            Terrain.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
            Terrain.Flush();
            //yield return 0;


            //Adding Trees to this chunk
            if (EdgeType == ChunkEdge.NotEdge)
            {
                AddTrees();
                //yield return 0;
            }

            AddRocks();
            //yield return 0;
            //Add feature if nessecary
            AddFeature(newTerrainGameObject);
        }
예제 #3
0
        public void CreateTerrain()
        {
            Data = new TerrainData();
            Data.heightmapResolution = Settings.HeightmapResolution;
            Data.alphamapResolution  = Settings.AlphamapResolution;
            Data.SetHeights(0, 0, Heightmap);
            ApplyTextures(Data);

            Data.size = new Vector3(Settings.Length, Settings.Height, Settings.Length);
            var newTerrainGameObject = Terrain.CreateTerrainGameObject(Data);

            newTerrainGameObject.transform.position = new Vector3(Position.X * Settings.Length, 0, Position.Z * Settings.Length);

            Terrain = newTerrainGameObject.GetComponent <Terrain>();
            Terrain.heightmapPixelError  = 8;
            Terrain.materialType         = UnityEngine.Terrain.MaterialType.Custom;
            Terrain.materialTemplate     = Settings.TerrainMaterial;
            Terrain.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
            Terrain.Flush();
        }
//
//        #region Heightmap stuff
//
//        public void GenerateHeightmap()
//        {
//            var thread = new Thread(GenerateHeightmapThread);
//            thread.Start();
//        }
//
//        private void GenerateHeightmapThread()
//        {
//            lock (HeightmapThreadLockObject)
//            {
//                var heightmap = new float[Settings.HeightmapResolution, Settings.HeightmapResolution];
//
//                for (var zRes = 0; zRes < Settings.HeightmapResolution; zRes++)
//                {
//                    for (var xRes = 0; xRes < Settings.HeightmapResolution; xRes++)
//                    {
//                        var xCoordinate = Position.X + (float)xRes / (Settings.HeightmapResolution - 1);
//                        var zCoordinate = Position.Z + (float)zRes / (Settings.HeightmapResolution - 1);
//
//                        heightmap[zRes, xRes] = NoiseProvider.GetValue(xCoordinate, zCoordinate);
//                    }
//                }
//
//                Heightmap = heightmap;
//            }
//        }
//
//        public bool IsHeightmapReady()
//        {
//            return Terrain == null && Heightmap != null;
//        }
//
//        public float GetTerrainHeight(Vector3 worldPosition)
//        {
//            return Terrain.SampleHeight(worldPosition);
//        }
//
//        #endregion
//
//        #region Main terrain generation
//
//        public void CreateTerrain()
//        {
//            Data = new TerrainData();
//            Data.heightmapResolution = Settings.HeightmapResolution;
//            Data.alphamapResolution = Settings.AlphamapResolution;
//            Data.SetHeights(0, 0, Heightmap);
//            ApplyTextures(Data);
//
//            Data.size = new Vector3(Settings.Length, Settings.Height, Settings.Length);
//            var newTerrainGameObject = Terrain.CreateTerrainGameObject(Data);
//            newTerrainGameObject.transform.position = new Vector3(Position.X * Settings.Length, 0, Position.Z * Settings.Length);
//
//            Terrain = newTerrainGameObject.GetComponent<Terrain>();
//            Terrain.heightmapPixelError = 8;
//            Terrain.materialType = UnityEngine.Terrain.MaterialType.Custom;
//            Terrain.materialTemplate = Settings.TerrainMaterial;
//            Terrain.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
//            Terrain.Flush();
//
//        }
        public void CreateTerrain()
        {
            var terrainData = new TerrainData();

            terrainData.heightmapResolution = Settings.HeightmapResolution;
            terrainData.alphamapResolution  = Settings.AlphamapResolution;

            var heightmap = GetHeightmap();

            terrainData.SetHeights(0, 0, heightmap);
            terrainData.size = new Vector3(Settings.Length, Settings.Height, Settings.Length);

            var newTerrainGameObject = Terrain.CreateTerrainGameObject(terrainData);

            newTerrainGameObject.transform.position = new Vector3(X * Settings.Length, 0, Z * Settings.Length);
            Terrain = newTerrainGameObject.GetComponent <Terrain>();
            Terrain.Flush();

            Terrain.transform.parent = Parr.transform;
        }