Hello Community,
As the title says I'm getting this error -> *Trying to access out-of-bounds terrain height information*
When calling TerrainData.GetHeights();
Here's my code...
public void RaiseTerrain(Terrain terrain, Vector3 point, int brushSize, float opacity) { var terrainData = terrain.terrainData; var terrainSize = terrainData.size; var terrainWidth = terrainData.heightmapWidth; var terrainHeight = terrainData.heightmapHeight; var offset = brushSize / 2; var tempCoordinates = (point - terrain.GetPosition()); var coordinates = new Vector3 ( (tempCoordinates.x / terrainSize.x), (tempCoordinates.y / terrainSize.y), (tempCoordinates.z / terrainSize.z) ); var relativeCoordinates = new Vector3(coordinates.x * terrainWidth, 0f, coordinates.z * terrainHeight); var terrainX = ((int)relativeCoordinates.x - offset); var terrainZ = ((int)relativeCoordinates.z - offset); terrainX = Mathf.Clamp(terrainX, 0, terrainWidth); terrainZ = Mathf.Clamp(terrainZ, 0, terrainHeight); var heights = terrainData.GetHeights(terrainX, terrainZ, brushSize, brushSize); for (int xx = 0; xx < brushSize; xx++) { for (int yy = 0; yy < brushSize; yy++) { heights[xx, yy] += (opacity * Time.deltaTime); } } terrainData.SetHeights(terrainX, terrainZ, heights); }
When calling TerrainData.GetHeights();
Here's my code...
public void RaiseTerrain(Terrain terrain, Vector3 point, int brushSize, float opacity) { var terrainData = terrain.terrainData; var terrainSize = terrainData.size; var terrainWidth = terrainData.heightmapWidth; var terrainHeight = terrainData.heightmapHeight; var offset = brushSize / 2; var tempCoordinates = (point - terrain.GetPosition()); var coordinates = new Vector3 ( (tempCoordinates.x / terrainSize.x), (tempCoordinates.y / terrainSize.y), (tempCoordinates.z / terrainSize.z) ); var relativeCoordinates = new Vector3(coordinates.x * terrainWidth, 0f, coordinates.z * terrainHeight); var terrainX = ((int)relativeCoordinates.x - offset); var terrainZ = ((int)relativeCoordinates.z - offset); terrainX = Mathf.Clamp(terrainX, 0, terrainWidth); terrainZ = Mathf.Clamp(terrainZ, 0, terrainHeight); var heights = terrainData.GetHeights(terrainX, terrainZ, brushSize, brushSize); for (int xx = 0; xx < brushSize; xx++) { for (int yy = 0; yy < brushSize; yy++) { heights[xx, yy] += (opacity * Time.deltaTime); } } terrainData.SetHeights(terrainX, terrainZ, heights); }