簡體   English   中英

如何在EditorWindow中暫停/繼續計時器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM