x


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.

more ▼

asked Aug 14 '10 at 06:49 PM

sanderman0 gravatar image

sanderman0
137 5 5 11

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

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.

more ▼

answered Aug 14 '10 at 07:07 PM

Eric5h5 gravatar image

Eric5h5
80.3k 42 132 521

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]

Aug 15 '10 at 08:49 AM sanderman0

@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.)

Aug 15 '10 at 09:27 AM Eric5h5
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x5084
x1477
x83
x48

asked: Aug 14 '10 at 06:49 PM

Seen: 3432 times

Last Updated: Aug 14 '10 at 06:49 PM