Files
2026-02-21 16:45:37 +08:00

64 lines
1.5 KiB
C#

using System.Collections.Generic;
using UnityEngine;
public class TerrainHeight : MonoBehaviour
{
public GameObject TerrainParent;
private List<Transform> terrains = new List<Transform>();
private Rect[] terrainRects;
public Transform cube;
private void Awake()
{
Transform[] componentsInChildren = TerrainParent.GetComponentsInChildren<Transform>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
Terrain component = componentsInChildren[i].GetComponent<Terrain>();
if ((bool)component)
{
terrains.Add(componentsInChildren[i]);
}
}
terrainRects = new Rect[terrains.Count];
for (int j = 0; j < terrains.Count; j++)
{
Terrain component = terrains[j].GetComponent<Terrain>();
terrainRects[j].x = terrains[j].position.x;
terrainRects[j].y = terrains[j].position.z;
terrainRects[j].width = component.terrainData.size.x;
terrainRects[j].height = component.terrainData.size.z;
}
}
private Terrain GetTerrainTile(Vector3 position)
{
for (int i = 0; i < terrains.Count; i++)
{
if (terrainRects[i].Contains(new Vector2(position.x, position.z)))
{
return terrains[i].GetComponent<Terrain>();
}
}
return null;
}
private float GetTerrainHeight(Vector3 position)
{
Terrain terrainTile = GetTerrainTile(position);
if ((bool)terrainTile)
{
return terrainTile.SampleHeight(position);
}
return -1f;
}
private void Update()
{
float terrainHeight = GetTerrainHeight(cube.position);
Debug.Log(string.Concat("Position: ", cube.position, " height: ", terrainHeight));
}
}