using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Timers;
using System.Diagnostics;
using System.Threading;
public class Auto : EditorWindow
{
private double next = 0;
private double time = 0;
private bool stop;
private bool pause;
private bool reset = false;
private bool waitForUI = false;
private bool minimizeToZero;
private static Auto editor;
private static int width = 300;
private static int height = 120;
private static int x = 0;
private static int y = 0;
private System.Timers.Timer timer;
private int h = 5, m = 33, s = 5;
private static float next = 0.0f;
[MenuItem("Window/Auto")]
static void ShowEditor()
{
editor = EditorWindow.GetWindow<Auto>();
editor.Init();
CenterWindow();
}
public void Init()
{
timer = new System.Timers.Timer();
timer.Interval = 1000;//1s
timer.Elapsed += T_Elapsed;
timer.Start();
}
private void T_Elapsed(object sender, ElapsedEventArgs e)
{
if (s == 0)
{
s = 60;
m -= 1;
}
if (m == 0)
{
m = 60;
h -= 1;
}
s -= 1;
}
void OnGUI()
{
minimizeToZero = GUILayout.Toggle(minimizeToZero, "Minimize To Zero");
if (pause)
{
GUI.enabled = false;
}
else
{
GUI.enabled = true;
}
stop = GUILayout.Toggle(stop, "Stop");
if (stop)
{
GUI.enabled = false;
}
else
{
GUI.enabled = true;
}
pause = GUILayout.Toggle(pause, "Pause");
GUILayout.Space(10);
if (minimizeToZero)
{
MinimizeWindow();
}
else
{
CenterWindow();
}
next = EditorGUILayout.Slider(next, 1, 100);
string t = string.Format("{0}:{1}:{2}", h.ToString().PadLeft(2, '0'), m.ToString().PadLeft(2, '0'), s.ToString().PadLeft(2, '0'));
EditorGUILayout.LabelField("Next: ", t);
if (stop)
{
timer.Stop();
reset = true;
}
else
{
if (reset)
{
timer.Start();
h = 5;
m = 33;
s = 5;
reset = false;
}
}
if (pause)
{
timer.Stop();
}
else
{
timer.Start();
}
}
}
У меня есть следующая переменная, которую я использую с ней для ползунка:
next = EditorGUILayout.Slider(next, 1, 100);
Что я хочу сделать, это при изменении значения ползунка, когда таймер работает, изменение в реальном временивремя одно из значений таймера, например, переменная s (секунды), и каждый раз, когда оно меняет значение s, таймер отсчитывается от текущего нового значения секунд.Или если это m (минуты) или h (часы).
Если после строки:
next = EditorGUILayout.Slider(next, 1, 100);
Я делаю:
s = (int)next;
Таймерникогда не начнет работать.То, что я хочу сделать, это изменить таймер обратного отсчета значения / с в режиме реального времени и продолжать отсчет с текущего изменения нового значения.Не останавливать таймер и начинать все сначала, а продолжать работать со следующего измененного значения / с.