Что Color.Lerp(Color a, Color b, float t)
делает
Линейная интерполяция между цветами a и b по t
Например, Color.Lerp(Color.blue, Color.red, 0.5f)
возвращает половинную интерполяцию между синим икрасный.Когда вы говорите Color.Lerp(oldColor, newColor, 5)
, он возвращает newColor, потому что
t ограничен между 0 и 1. Когда t равен 0, возвращает a.Когда t равно 1, возвращается b.
Итак, 5 - это то же самое, что и вставка 1.
Так что вам нужно будет хранить переменную t
где-нибудь, начиная с 0 ис шагом до 1 вы вводите Lerp
.
Например:
float t = 0;
private void Update()
{
t += Time.deltaTime / 5.0f; // Divided by 5 to make it 5 seconds.
this.GetComponent<Renderer>().color = Color.Lerp(oldColor, newColor, t);
}
https://docs.unity3d.com/ScriptReference/Color.Lerp.html
РЕДАКТИРОВАТЬ
Также, что происходит в вашем коде, при условии, что вы сбрасываете t, когда таймер нажимает
- Таймер> = 10.0f
- Лерп один раз
- Сброс таймера до 0
.Вместо этого вы могли бы сделать что-то вроде этого (я взял наблюдателей и все такое, чтобы было легче видеть)
float t, timer;
bool lerping = false;
Color newColor;
void Update()
{
t += Time.deltaTime / 5.0f;
timer += Time.deltaTime;
if (timer >= 10f)
{
lerping = true;
t = 0;
newColor = new Color(Random.value, Random.value, Random.value, 1.0f);
Debug.Log("Lerping!");
timer = 0;
}
if (lerping)
{
GetComponent<Renderer>().material.color = Color.Lerp(oldColor, newColor, t);
if (t >= 1.0f)
{
lerping = false;
Debug.Log("Stopped lerping");
}
}
}