[英]How can I pause/continue a timer in EditorWindow?
void OnGUI()
{
pauseCounting = GUILayout.Toggle(pauseCounting, "Pause timer");
Timer();
}
然后:
private void Timer()
{
if (stopCounting == false)
{
EditorGUILayout.LabelField("Count Each:", countTime + " Secs");
if (waitForUI)
timeToCount = nextCountTime - EditorApplication.timeSinceStartup;
EditorGUILayout.LabelField("Next Count:", timeToCount.ToString() + " Sec");
if (waitForUI == false)
{
timeToCount = 30;
waitForUI = true;
}
this.Repaint();
if (EditorApplication.timeSinceStartup > nextCountTime)
{
nextCountTime = EditorApplication.timeSinceStartup + countTime;
}
}
else
{
EditorGUILayout.LabelField("Counting:", countTime + " Secs");
EditorGUILayout.LabelField("Next Count:", countToSave.ToString() + " Sec");
}
}
問題是我現在使用的是EditorApplication.timeSinceStartup,如果我將stopCounting標志更改為true,然后又返回false,它將使用EditorApplication.timeSinceStartup進行計算,並且不會從停止點繼續。 我希望如果stopCounting為true,那么false再次從上次暫停開始繼續計時。
在您的班級中,添加一個字段以記錄總的滴答時間:
double timerRecord;
在您的onEnable中,將其初始化:
timerRecord = EditorApplication.timeSinceStartup;
在您的OnGUI()中,添加一些邏輯以檢查“重新啟動”操作:
var shouldStop = GUILayout.Toggle(stopCounting, "Pause timer");
if(!shouldStop && stopCounting)
{
// in this case, you restarted the timer.
timerRecord = EditorApplication.timeSinceStartup;
}
stopCounting = shouldStop;
Timer();
最后,在您的Time()中,將所有的'EditorApplication.timeSinceStartup'替換為'timerRecord',最后,將其'timerRecord'的值替換為'EditorApplication.timeSinceStartup'。
timerRecord = EditorApplication.timeSinceStartup;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.