123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- using UnityEngine;
- using System.Collections;
- using TerrainComposer2;
- public class EditTerrain
- {
- static public float GetHeight(Vector3 worldPos)
- {
- Terrain t = GetTerrain(worldPos);
- if (t == null) return -1;
- Vector2 startPos = new Vector2(worldPos.x - t.transform.position.x, worldPos.z - t.transform.position.z);
- Vector3 size = t.terrainData.size;
- int resolution = t.terrainData.heightmapResolution;
-
- return t.terrainData.GetHeight(Mathf.RoundToInt((startPos.x / size.x) * resolution), Mathf.RoundToInt(startPos.y / size.x) * resolution);
- }
- static public void SetHeight(Vector3 worldPos, float height)
- {
- Terrain t = GetTerrain(worldPos);
- if (t == null) return;
- Vector2 startPos = new Vector2(worldPos.x - t.transform.position.x, worldPos.z - t.transform.position.z);
- Vector3 size = t.terrainData.size;
- int resolution = t.terrainData.heightmapResolution;
- float[,] heights = new float[1, 1];
- heights[0, 0] = height - t.transform.position.y;
- t.terrainData.SetHeights(Mathf.RoundToInt((startPos.x / size.x) * resolution), Mathf.RoundToInt(startPos.y / size.x) * resolution, heights);
- }
- static public Terrain GetTerrain(Vector3 worldPos)
- {
- TC_Area2D area2D = TC_Area2D.current;
- for (int i = 0; i < area2D.terrainAreas[0].terrains.Count; i++)
- {
- TCUnityTerrain t = area2D.terrainAreas[0].terrains[i];
- if (t.terrain == null) continue;
- if (t.terrain.terrainData == null) continue;
- Rect rect = new Rect(t.terrain.transform.position.x, t.terrain.transform.position.z, t.terrain.terrainData.size.x, t.terrain.terrainData.size.z);
- if (rect.Contains(worldPos)) return t.terrain;
- }
- return null;
- }
- }
|