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(); } }
//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); }
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; }