Код: Выделить всё
private void OnValidate()
{
// Handle changes to changeBothRadius
if (changeBothRadius != previousBothRadius)
{
SyncRadii(); // Sync radii when changeBothRadius changes
previousBothRadius = changeBothRadius;
}
else if (xradius != previousXradius || yradius != previousYradius)
{
// Allow independent changes to xradius and yradius
Debug.Log($"Updating radii: X = {xradius}, Y = {yradius}");
previousXradius = xradius;
previousYradius = yradius;
}
// Update LineRenderer and object positions
if (line != null && draw)
{
ConfigureLineRenderer();
CreatePoints();
AdjustPositions(numOfObjects, transform.position, xradius, yradius); // Pass both radii
}
}
например, если я xradius 3, а yradius равен 7 и я меняю значение ChangeBothRadius на 10, то и xradius, и yradius «перепрыгивают» на значение 10.
вместо этого я хочу, чтобы они плавно меняли значения.
Код: Выделить всё
void SyncRadii()
{
xradius = changeBothRadius;
yradius = changeBothRadius;
previousXradius = xradius;
previousYradius = yradius;
}
Код: Выделить всё
void SyncRadii()
{
// Start the coroutine to smooth the radius change
StopAllCoroutines(); // Stop any ongoing radius adjustments
StartCoroutine(SmoothSyncRadii(changeBothRadius, 0.5f)); // Adjust over 0.5 seconds
previousXradius = xradius;
previousYradius = yradius;
}
Код: Выделить всё
private IEnumerator SmoothSyncRadii(float targetRadius, float duration)
{
float elapsedTime = 0f;
float startXRadius = xradius;
float startYRadius = yradius;
while (elapsedTime < duration)
{
elapsedTime += Time.deltaTime;
float t = elapsedTime / duration;
// Smoothly interpolate the radii
xradius = Mathf.Lerp(startXRadius, targetRadius, t);
yradius = Mathf.Lerp(startYRadius, targetRadius, t);
yield return null; // Wait until the next frame
}
// Ensure the final value is set
xradius = targetRadius;
yradius = targetRadius;
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... -coroutine