Question by
Legacy_Software · Jun 13, 2018 at 12:21 AM ·
terrainfirst person controllermodification
I need help fixing this terrain deformation script, please!,Can someone please help me fix this script? Terrain Deformation Issues
public class TerrainModification : MonoBehaviour {
public Terrain terrain;
public float strength = 0.01f;
private int heightmapWidth;
private int heightmapHeight;
private float[,] heights;
private TerrainData terrainData;
public void Start ()
{
terrainData = terrain.terrainData;
heightmapWidth = terrainData.heightmapWidth;
heightmapHeight = terrainData.heightmapHeight;
heights = terrainData.GetHeights (0, 0, heightmapWidth, heightmapHeight);
}
public void Update ()
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
//raise terrain
if (Input.GetMouseButton (0))
{
if (Physics.Raycast(ray, out hit))
{
RaiseTerrain(hit.point);
{
}
//lower terrain
if (Input.GetMouseButton (1))
{
if (Physics.RayCast (ray, out hit))
{
LowerTerrain (hit.point);
}
}
}
void RaiseTerrain(Vector3 point)
{
int mouseX = (int)((point.x / terrainData.size.x) * heightmapWidth);
int mouseZ = (int)((point.y / terrainData.size.y) * heightmapHeight);
float[,] modifiedHeights = new float[1, 1];
float y = heights[mouseX, mouseZ];
y += strength * Time.deltaTime;
if (y > terrainData.size.y)
{
y = terrainData.size.y;
}
modifiedHeights[0, 0] = y;
heights[mouseX, mouseZ] = y;
terrainData.SetHeights(mouseX, mouseZ, modifiedHeights);
}
void LowerTerrain(Vector3 point)
{
int mouseX = (int)((point.x / terrainData.size.x) * heightmapWidth);
int mouseZ = (int)((point.y / terrainData.size.y) * heightmapHeight);
float[,] modifiedHeights = new float[1, 1];
float y = heights[mouseX, mouseZ];
y -= strength * Time.deltaTime;
if (y < terrainData.size.y)
{
y = terrainData.size.y;
}
modifiedHeights[0, 0] = y;
heights[mouseX, mouseZ] = y;
terrainData.SetHeights(mouseX, mouseZ, modifiedHeights);
}
}
Comment