- Home /
Inserting heights in TerrainData
Hi.
I'm experimenting with procedural landscape generation and paging terraintiles. Every TerrainTile has a Unity Terrain and is being populated with heights. I am having some difficulties with building the TerrainData object for each terrain.
In this case my goal is a terrain tile of 1km square in size with a resolution of 129. My initial assumption was I could set the desired size and feed the TerrainData object with a 129x129 array of floats.
Naturally. It isn't that easy. For this purpose the SetHeights method is needed but it has no description so I haven't a clue how to use it.
Through some experimentation and studying the exceptions the mapsize seems set to 33, with no way to change it. And I have no idea what the xBase and yBase mean.
Am I looking at this from the wrong angle? It would be great if someone could explain this in more detail.
So is there no solution for this? I seem to have the exact same problem and no clue!
Answer by Eric5h5 · Aug 14, 2010 at 07:07 PM
My initial assumption was I could set the desired size and feed the TerrainData object with a 129x129 array of floats.
That is correct, and yes it's that easy.
myTerrain.terrainData.SetHeights(0, 0, myTerrainData);
Where "myTerrain" is a Terrain and "myTerrainData" is a float[,]. The terrain resolution is not fixed at 33; it's only 33 if you've specifically set it that way (which would result in a very low-res terrain). If the resolution is 129, then you use a 129x129 array of floats. The xBase and yBase are the x and y offset; if you're setting the entire terrain, then they would be 0. If you weren't setting the entire terrain, then the offsets would be non-zero depending on where you wanted to put the section of terrain data.
Thanks but I still get exceptions when I try to feed it my 129x129 array. It seems the resolution is set to 33 by default when a TerrainData is constructed, but where do I change this? heightmapWidth and heightmapHeight are read-only. I've found a heightmapResolution property but this is not documented in the script reference. Is it safe to use?
This is the exception I am getting:
Exception: X or Y base out of bounds. Setting up to 129x129 while map size is 33x33 UnityEngine.TerrainData.SetHeights (Int32 xBase, Int32 yBase, System.Single[,] heights) [0x00000]
@Sanderman: since TerrainData.heightmapResolution isn't documented, it shouldn't be used in a webplayer because it can break in the future. Generally you'd create the TerrainData asset in the editor the usual way, then you can reference it in a script. (If you need to dynamically generate different terrain resolutions from script, that's not really feasible though.)
Answer by Trond · Apr 06, 2019 at 09:23 PM
You need to set up the property called heightmapResolution
. This is by default 33 (32+1), and needs to be a power of 2 + 1.
Your answer
Follow this Question
Related Questions
Spherical Terrain or screenshot to texture 0 Answers
generate terrain by script 0 Answers
"Terrain.activeTerrain" what does it do? 1 Answer
How to generate a complete terrain via Script 0 Answers
Unity imports heightmaps in kind of upside down order. 0 Answers