Вверху:
public enum CircleHeight
{
Center, Bottom, Top
};
public CircleHeight circleheight;
public bool draw = false;
В начале:
void Start()
{
circleheight = CircleHeight.Center;
}
В обновлении:
void Update()
{
line.startWidth = lineThickness;
line.endWidth = lineThickness;
if (draw)
{
line.enabled = true;
CreatePoints();
}
else
{
line.enabled = false;
}
}
Внутри CreatePoints:
void CreatePoints()
{
float x;
float z;
float angle = 20;
switch (circleheight)
{
case CircleHeight.Center:
height = 0;
break;
case CircleHeight.Bottom:
height = transform.InverseTransformPoint(renderer.bounds.min).y + 0.1f;
break;
case CircleHeight.Top:
height = transform.InverseTransformPoint(renderer.bounds.max).y;
break;
}
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);
}
}
Внутри метода CreatePoints я могу изменять перечисляемые состояния высоты.Но теперь я хочу добавить флаг, что если он будет истинным внутри точек CreatePoints, он автоматически изменит состояние высот автоматически медленно сглаживая.
Я пытался добавить внутри CreatePoints эту часть:
if(animateCircle)
{
t += Time.deltaTime / 3;
height = Mathf.Lerp(0, 1, t);
height = Mathf.Lerp(1, transform.InverseTransformPoint(renderer.bounds.min).y + 0.1f, t);
}
И он движется медленно сверху вниз медленно, но только один раз.И он перемещается между всеми 3 состояниями высоты и не повторяется автоматически.Так что это не работает хорошо, как я хотел.