Unity's Time.deltaTime
будет одинаковым в функции или цикле в функции.Он меняет каждый кадр, но вызов функции один раз - это один кадр.Проблема в том, что вы использовали его в цикле while
, не ожидая следующего кадра, поэтому вы получаете то же значение.
Кроме того, поскольку вы не ожидаете фрейм, вместо кода, выполняемого для нескольких фреймов, он будет выполняться только в одном фрейме, и вы не сможете увидеть изменения на индикаторе.Решением этой проблемы является помещение yield return null
в каждый цикл while
.Он заставит код в цикле while
запускаться каждый кадр до тех пор, пока не будет выполнено условие, а затем завершится.
public IEnumerator flashNow()
{
float waitTime = totalSeconds / 2;
// Get half of the seconds (One half to get brighter and one to get darker)
while (myLight.intensity < maxIntensity)
{
myLight.intensity += Time.deltaTime / waitTime; // Increase intensity
//Wait for a frame
yield return null;
}
while (myLight.intensity > 0)
{
myLight.intensity -= Time.deltaTime / waitTime; //Decrease intensity
//Wait for a frame
yield return null;
}
yield return null;
}
Поскольку это функция карутины, не забудьте вызвать или запустить ее с StartCoroutine(flashNow())
* * 1014