Hello everyone!
Soo, i was trying to convert this script, that was in JavaScript to C#
So far, i “accomplished” that, but even if the script wasn’t reporting any compile erros, it won’t work!
And by the way, this script is supposed to take a Texture2D and apply into the terrain HeightMap.
Thanks
link: Original Script
My “Converted” Script:
static void ApplyHeightmap(int index)
{
var heightmap = heightMap[index];
var terrain = Terrain.activeTerrain.terrainData;
var w = heightmap.width;
var h = heightmap.height;
var w2 = terrain.heightmapWidth;
var heightmapData = terrain.GetHeights(0, 0, w2, w2);
var mapColors = heightmap.GetPixels();
var map = new Color[w2 * w2];
if (w2 != w || h != w)
{
// Resize using nearest-neighbor scaling if texture has no filtering
if (heightmap.filterMode == FilterMode.Point)
{
var dx = w / w2;
var dy = h / w2;
for (int y = 0; y < w2; y++)
{
var thisY = dy * y * w;
var yw = y * w2;
for (int x = 0; x < w2; x++)
{
map[yw + x] = mapColors[thisY + dx * x];
}
}
}
// Otherwise resize using bilinear filtering
else
{
var ratioX = 1.0f / w2 / (w - 1);
var ratioY = 1.0f / w2 / (h - 1);
for (int y = 0; y < w2; y++)
{
var yy = Mathf.Floor(y * ratioY);
var y1 = yy * w;
var y2 = (yy + 1) * w;
var yw = y * w2;
for (int x = 0; x < w2; x++)
{
var xx = Mathf.Floor(x * ratioX);
int temp_integer = (int)y1;
temp_integer += (int)xx;
var bl = mapColors[temp_integer];
temp_integer = (int)y1;
temp_integer += ((int)xx) + 1;
var br = mapColors[temp_integer];
temp_integer = (int)y2;
temp_integer += ((int)xx);
var tl = mapColors[temp_integer];
temp_integer = (int)y2;
temp_integer += ((int)xx) + 1;
var tr = mapColors[temp_integer];
var xLerp = x * ratioX - xx;
map[yw + x] = Color.Lerp(Color.Lerp(bl, br, xLerp), Color.Lerp(tl, tr, xLerp), y * ratioY - yy);
}
}
}
}
else
{
// Use original if no resize is needed
map = mapColors;
}
// Assign texture data to heightmap
for (int y = 0; y < w2; y++)
{
for (int x = 0; x < w2; x++)
{
heightmapData[y, x] = map[y * w2 + x].grayscale;
}
}
terrain.SetHeights(0, 0, heightmapData);
}