void GenerateTilesFromHeightMap(List <float> heightMap) { //generate at origin SpriteRenderer spriteRenderer = OceanTile.GetComponent <SpriteRenderer>(); Vector3 tileSize = spriteRenderer.sprite.bounds.size; GameObject terrainGridGO = GameObject.Find(terrainGridGOName); Vector2 centeredOffset = new Vector2(-tileSize.x * (gridSize.x * 0.5f), -tileSize.y * (gridSize.y * 0.5f)); if (terrainGridGO) { GameObject.DestroyObject(terrainGridGO); } terrainGridGO = new GameObject(terrainGridGOName); TerrainManager manager = terrainGridGO.AddComponent <TerrainManager>(); manager.gridSize = gridSize; GameObject newTile; for (int x = 0; x < gridSize.x; x++) { for (int y = 0; y < gridSize.y; y++) { float heightValue = heightMap[getGridCoord(x, y)]; if (heightValue > mountainThreshold) { newTile = GameObject.Instantiate(MountainTile); } else if (heightValue > grassThreshold) { newTile = GameObject.Instantiate(GrassTile); } else if (heightValue > sandThreshold) { newTile = GameObject.Instantiate(SandTile); } else if (heightValue > waterThreshold) { newTile = GameObject.Instantiate(WaterTile); } else //(heightValue > oceanThreshold) { newTile = GameObject.Instantiate(OceanTile); } Tile tileScript = newTile.GetComponent <Tile>(); newTile.name = "Tile: " + x + "," + y; newTile.transform.parent = terrainGridGO.transform; newTile.transform.Translate(centeredOffset.x, centeredOffset.y, 0); //offset to generate centered newTile.transform.Translate(x * tileSize.x, y * tileSize.y, 0); tileScript.xCoord = x; tileScript.yCoord = y; manager.AddTile(tileScript); } } manager.CalculateBattlegrounds(); }