Код никогда не может выйти из цикла while(timerRunning)
, так как вы никогда не выполняете timerRunning = false
внутри указанного цикла.
Более того, даже если вы добавите timerRunning = false
в раздел if ((Time.time - lastTicktime) > tickTime) { }
, вызависание выполнения основного потока Unity до тех пор, пока это условие не станет true
(в основном Unity остановлен, пока не пройдет хотя бы tickTime
секунд).
Если вам нужно использовать таймер И позволить Unity исполниться,затем используйте сопрограммы.
Редактировать: чтобы ответить на ваш комментарий, измените код следующим образом:
using UnityEngine;
using System.Collections;
public class Timer {
float tickTime;
float lastTicktime;
bool timerRunning = false;
public Timer(float tickTime) {
this.tickTime = tickTime;
}
public IEnumerator StartTimer() {
timerRunning = true;
lastTicktime = Time.time;
while (timerRunning) {
if ((Time.time - lastTicktime) > tickTime) {
Debug.Log("Tick");
lastTicktime = Time.time;
timerRunning = false;
}
yield return null;
}
}
}
Реализация:
private Timer timer;
private IEnumerator timerCoroutine;
private void Start() {
timer = new Timer(triggerTime);
timerCoroutine = timer.StartTimer();
StartCoroutine(timerCoroutine);
}