Exemple #1
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;
        }