Это не то, как Lerp
работает.
Линейная интерполяция между цветами a и b по t.
t ограничен между 0 и 1. Когда т равен 0, возвращает а. Когда t равно 1, возвращается b.
Вы называете это только один раз с небольшим небольшим коэффициентом около 0,5 / 60, так что около 0.008333
получается почти начальное значение.
Кроме того, вы ждете одну секунду перед сбросом stepPositiontimet
, поэтому на одну секунду метод Update
запускает несколько сотен одновременных сопрограмм!
Для затухания цвета в течение одной секунды используйте что-то вроде
IEnumerator FadeTimer(float duration)
{
// This has to be done right away!
// Otherwise you get concurrent routines!
stepPositioner = false;
_renderer.GetPropertyBlock(_propertyBlock);
_propertyBlock.SetColor("_MainColor", startColor);
_renderer.SetPropertyBlock(_propertyBlock);
var timePassed = 0f;
while (timePassed < duration)
{
_renderer.GetPropertyBlock(_propertyBlock);
_propertyBlock.SetColor("_MainColor", Color.Lerp(startColor, endColor, timePassed / duration));
_renderer.SetPropertyBlock(_propertyBlock);
// Add the time since last frame
timePassed += Time.deltaTime;
// Tells Unity to "pause" the routine, render this frame
// and continue from here in the next frame
yield return null;
}
// Just to be sure set the final value in the end
_renderer.GetPropertyBlock(_propertyBlock);
_propertyBlock.SetColor("_MainColor", endColor, );
_renderer.SetPropertyBlock(_propertyBlock);
}
Просто добавил продолжительность в качестве параметра, чтобы сделать его более понятным и гибким. Поэтому просто назовите его как
StarCoroutine(FadeTimer(2));
, например, чтобы оно исчезло в течение 2 секунд
Примечание: напечатано на смартфоне, но я надеюсь, что идея проясняется