В вашем решении метод выполняется только ОДИН РАЗ, поэтому может произойти только ОДНО изменение цвета.Вот как я обычно это делаю:
void Start()
{
// ... your other stuff
StartCoroutine(ChangeEngineColour());
}
private IEnumerator ChangeEngineColour()
{
float tick = 0f;
while (engineBodyRenderer.material.color != endColor)
{
tick += Time.deltaTime * speed;
engineBodyRenderer.material.color = Color.Lerp(startColor, endColor, tick);
yield return null;
}
}
При запуске Coroutine этот код будет выполняться асинхронно рядом с остальной частью кода, и с yield return null
он будет зацикливаться с той же скоростью, что и ваши Update()
функции,по сути, вы создали изолированный метод Update (), который запускает каждый кадр и постепенно меняет цвет каждого кадра.