Вариант первый: внутри Update уменьшаете число с определённой скоростью и постоянно проверяете перешагнуло ли значение порог.
using UnityEngine;
public class Test : MonoBehaviour
{
public float value = 100;
public float speed = 5;
private void Update()
{
value -= Time.deltaTime*speed;
if (value < 0)
{
Debug.Log("Zero");
}
}
}
Такой вариант удобен, если не нужна точность, интервал времени небольшой, а после достижения значения скрипт уничтожается либо перезапускается. Время достижения цели вычисляется делением value на speed, либо наоборот из времени можно вычислять скорость. На плохом FPS значение будет плавать, синхронизировать несколько таймеров будет проблемно.
Второй вариант: вычислять время, когда переменная должна принять определённое значение, текущее значение вычислять когда надо.
using UnityEngine;
public class Test : MonoBehaviour
{
public float maxValue = 100;
public float interval = 20;
public float currentValue;
private float zeroTime;
private void Awake()
{
zeroTime = Time.time + interval;
}
private void Update()
{
if (Time.time >= zeroTime)
{
Debug.Log("Zero");
}
else
{
float currentNormalizedTime = 1 - (zeroTime - Time.time)/interval;
currentValue = Mathf.Lerp(maxValue, 0, currentNormalizedTime);
}
}
}
Точность в таком случае будет лучше. Если хочется, то можно запоминать только время старта изменения переменной, либо и то и другое. Опираясь на время проще сделать нелинейное изменение значения, вместо лерпа можно подставить любую функцию.
Третий вариант такой же как и второй, только вместо Time.time нужно использовать
DateTime.Now. DateTime не завязан на сессию приложения, его можно сериализовать и сохранять локально либо на сервере. Например, вы делаете тамагочи и хотите, чтобы питомец подыхал, если за ним долго не ухаживать. С помощью сохранённого времени вы можете уменьшать здоровье в реальном времени и ретроспективно при запуске приложения.
Если хочется совсем харкора, то можно пользоваться не Update, а отдельным тредом, в котором будет жить ваш таймер, но такое бывает нужно лишь в исключительных случаях.