Вы можете использовать renderer.bounds.min.y
, чтобы получить наименьшую y позицию границ рендерера.
Однако, поскольку вы используете LineRenderer.useWorldSpace = false
, вам необходимо преобразовать renderer.bounds.min
в локальное пространство с помощью transform.InverseTransformPoint
,Таким образом, вы хотите transform.InverseTransformPoint(renderer.bounds.min).y
Также вы можете кэшировать рендер в Start
, потому что GetComponent
- дорогостоящая операция.
private Renderer renderer;
void Start()
{
line = gameObject.GetComponent<UnityEngine.LineRenderer>();
line.positionCount = segments + 1;
line.useWorldSpace = false;
renderer = gameObject.GetComponent<Renderer>();
}
void Update()
{
line.startWidth = lineThickness;
line.endWidth = lineThickness;
if (draw)
{
line.enabled = true;
CreatePoints();
}
else
{
line.enabled = false;
}
}
void CreatePoints()
{
float x;
float z;
float angle = 20;
if(drawBottom)
{
height = transform.InverseTransformPoint(renderer.bounds.min).y; // here
}
for (int i = 0; i < (segments + 1); i++)
{
x = Mathf.Sin(Mathf.Deg2Rad * angle) * xradius;
z = Mathf.Cos(Mathf.Deg2Rad * angle) * yradius;
line.SetPosition(i, new Vector3(x, height, z));
angle += (360f / segments + 1);
}
}