Использование Coroutine:
using UnityEngine;
using System.Collections;
public class TimerExample : MonoBehaviour
{
void Start()
{
// Запускаем корутину, которая выполнится через 5 секунд
StartCoroutine(DelayedFunction(5f));
// Запускаем корутину, которая будет выполняться каждые 2 секунды
StartCoroutine(RepeatingFunction(2f));
}
IEnumerator DelayedFunction(float delayTime)
{
yield return new WaitForSeconds(delayTime);
Debug.Log("Это выполнилось через " + delayTime + " секунд");
}
IEnumerator RepeatingFunction(float repeatTime)
{
while (true)
{
yield return new WaitForSeconds(repeatTime);
Debug.Log("Это выполняется каждые " + repeatTime + " секунд");
}
}
}
Альтернатива в виде Invoke и InvokeRepeating:
using UnityEngine;
public class InvokeExample : MonoBehaviour
{
void Start()
{
// Вызовет функцию DelayedFunction через 5 секунд
Invoke("DelayedFunction", 5f);
// Вызывает RepeatingFunction каждые 2 секунды, начиная с задержки в 1 секунду
InvokeRepeating("RepeatingFunction", 1f, 2f);
}
void DelayedFunction()
{
Debug.Log("Это выполнилось через 5 секунд");
}
void RepeatingFunction()
{
Debug.Log("Это выполняется каждые 2 секунды");
}
}
Time.time:
using UnityEngine;
public class TimeExample : MonoBehaviour
{
private float nextActionTime = 0f;
public float period = 2f;
void Update()
{
if (Time.time > nextActionTime)
{
nextActionTime = Time.time + period;
// Выполняем действие здесь
Debug.Log("Прошло " + period + " секунд");
}
}
}
Создание отдельного скрипта для таймера зависит от структуры проекта. Если таймер используется в разных местах, создай отдельный скрипт. Если это часть логики объекта, добавь его в скрипт объекта.
Выбери метод в зависимости от задачи: для простого отложенного выполнения используй Invoke, для более сложного контроля — Coroutine.
? И надо ли создавать отдельный скрипт для этого?