64 lines
1.5 KiB
C#
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));
|
|
}
|
|
}
|