System.Timers.Timer
是否可以在不使用or的情况下在 C# 中创建计时器System.Threading.Timer
?
我在 Unity 项目 (C#) 中使用计时器,并且正在尝试导出 WebGL 项目。Unity WebGL 导出中暂时不支持线程。
似乎使用System.Timers.Timer > Elapsed
事件在单独的线程上运行。(?)
System.Timers.Timer
是否可以在不使用or的情况下在 C# 中创建计时器System.Threading.Timer
?
我在 Unity 项目 (C#) 中使用计时器,并且正在尝试导出 WebGL 项目。Unity WebGL 导出中暂时不支持线程。
似乎使用System.Timers.Timer > Elapsed
事件在单独的线程上运行。(?)
AC# Timer 能够在指定的时间过去后触发回调函数,从而在单独的线程中运行检查。
如果您只关心经过的时间量并且不想使用 Unity 的 Time.deltaTime 功能,则可以使用 DateTime 来跟踪时间。这是一个提供此行为的基本示例类。
public class SimpleTimer
{
private DateTime StartTime;
private DateTime LastTime;
private bool running;
public double ElaspedTime { get { return GetElapsedTime(); } }
public void Start()
{
StartTime = DateTime.Now;
running = true;
}
public void Restart()
{
Start();
}
public double GetElapsedTime()
{
if (!running)
throw new Exception("SimpleTimer not running! Must call Start() prior to querying the Elapsed Time.");
LastTime = DateTime.Now;
var elaspedTime = LastTime - StartTime;
return elaspedTime.TotalMilliseconds;
}
public double GetElapsedTimeAndRestart()
{
var elaspedTime = GetElapsedTime();
Restart();
return elaspedTime;
}
}
...这是一个使用示例:
var timer = new SimpleTimer();
timer.Start();
//Prints the total time each iteration
for(var i = 1; i <=1000; i++)
{
System.Threading.Thread.Sleep(5);
Console.WriteLine("Loop " + i + ": Elasped Time = " + timer.ElaspedTime + " ms");
}
timer.Restart();
//Prints roughly 5ms each iteration
for (var i = 1; i <= 1000; i++)
{
System.Threading.Thread.Sleep(5);
Console.WriteLine("Loop " + i + ": Elasped Time = " + timer.ElaspedTime + " ms");
timer.Restart();
}
一旦达到所需的经过时间,这可以扩展为调用函数,但是您需要在代码中的某个位置调用检查方法,该位置经常且一致地运行。(就像在 FSM 循环中一样)
希望这可以帮助!
我认为您可以执行以下操作:
public class MyTimer : MonoBehaviour
{
float myTime = 0.0f;
void Update()
{
UpdateTime();
}
public void UpdateTime()
{
myTime += Time.deltaTime;
}
}