代码永远无法退出
while(timerRunning)
循环,因为你从不执行
timerRunning = false
在所述回路内。
而且,即使你加上
timerRunning=错误
在您的
if ((Time.time - lastTicktime) > tickTime) { }
第节,您将挂起Unity主线程的执行,直到条件满足为止
true
(基本上,直到至少
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);
}