Во-первых, давайте сделаем простой рефакторинг, возьмем бит, который выполняет реальную работу, и разделим его на метод.Итак, эти две строки:
spriteColor.a = fade;
sprite.color = spriteColor;
Можно превратить в метод и вызвать вместо него код youro
void SetFade(float fade)
{
spriteColor.a = fade;
sprite.color = spriteColor;
}
Тогда остальная часть вашего кода станет короче и станет более читабельной:
IEnumerator FadeCycle()
{
float startTime;
while (true)
{
startTime = Time.time;
while (fade < 1f)
{
fade = Mathf.Lerp(0f, 1f, (Time.time - startTime) / fadeInTime);
SetFade(fade);
yield return null;
}
SetFade(1);
yield return new WaitForSeconds(delayToFadeOut);
startTime = Time.time;
while (fade > 0f)
{
SetFade(Mathf.Lerp(1f, 0f, (Time.time - startTime) / fadeOutTime));
yield return null;
}
SetFade(0);
yield return new WaitForSeconds(delayToFadeIn);
}
}
}
Теперь, если вы хотите применить изменение к нескольким спрайтам, вам нужно всего лишь сделать int в одном месте.Измените ваше объявление с:
public SpriteRenderer sprite;
на
public SpriteRenderer[] sprites;
И, наконец, мы можем изменить наш метод SetFade так:
void SetFade(float fade)
{
spriteColor.a = fade;
foreach(var sprite in sprites)
sprite.color = spriteColor;
}