public static TerrainData GenerateLandmasses(TerrainData data, TerrainSettings settings, NoiseMap noiseMap) { noiseMap.XRandomOffset = Random.Range(0, 10000); noiseMap.ZRandomOffset = Random.Range(0, 10000); for (int x = 0; x < data.xSize; x++) { for (int z = 0; z < data.zSize; z++) { Vector3 position = new Vector3(x * settings.tileSize, 0, z * settings.tileSize); float noiseValue = noiseMap.GetLayeredPerlinValueAtPosition(x, z); if (noiseValue < settings.oceanPercent) { data.GetTileAtCoordinates(x, z).ReplaceTile(TileType.OceanFloor, position, Vector3.zero); data.GetTileAtCoordinates(x, z).elevationValue = noiseValue; } else if (noiseValue > settings.mountainLevel) { data.GetTileAtCoordinates(x, z).ReplaceTile(TileType.Mountain, position, Vector3.zero); data.GetTileAtCoordinates(x, z).elevationValue = noiseValue; } else { data.GetTileAtCoordinates(x, z).ReplaceTile(TileType.Plains, position, Vector3.zero); data.GetTileAtCoordinates(x, z).elevationValue = noiseValue; } } } return(data); }
public static void VaryTileElevation(GameObject tileGameObject, NoiseMap noise) { MeshFilter[] meshFilters = tileGameObject.GetComponentsInChildren <MeshFilter>(); Mesh[] allMeshes = new Mesh[meshFilters.Length]; for (int i = 0; i < meshFilters.Length; i++) { allMeshes[i] = meshFilters[i].sharedMesh; } for (int i = 0; i < allMeshes.Length; i++) { Vector3[] vertices = allMeshes[i].vertices; for (int j = 0; j < vertices.Length; j++) { vertices[i] = new Vector3(vertices[i].x, noise.GetLayeredPerlinValueAtPosition(vertices[i].x, vertices[i].z), vertices[i].z); } allMeshes[i].vertices = vertices; } }