c# - 如何在 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;
推荐阅读
- selenium-webdriver - 试图点击登录按钮,但它说元素不可交互
- java - Firebase Android Java - 无法获得孩子的价值
- python - 基于另一列的有序值汇总一列数据的python代码
- angular - 如何通过找到 ng-repeat 来选择下拉按钮?
- c# - 导入 TextMesh Pro 后编译器错误
- cocoapods - pod repo push 错误:多个命令产生
- c# - 如何创建一个矩形数组c#
- java - Binding a combo box vaadin 8
- php - 当方法是POST然后路由是GET时如何传递和捕获变量?
- spring-boot - BPM 工作流将如何在微服务中实现