C# 码内定时器

C# 码内定时器,c#,timer,unity3d,C#,Timer,Unity3d,在我的代码中,我想实现一个计时器,它让死亡在初始化之前等待2秒 void OnCollisionEnter2D(Collision2D other) { Die(); } void Die() { Application.LoadLevel(Application.loadedLevel); } 死亡是瞬间的,我希望它在初始化之前等待2秒钟 void OnCollisionEnter2D(Collision2D other) { Die(); } void Die(

在我的代码中,我想实现一个计时器,它让死亡在初始化之前等待2秒

void OnCollisionEnter2D(Collision2D other)
{
    Die();
}

void Die()
{
    Application.LoadLevel(Application.loadedLevel);
}
死亡是瞬间的,我希望它在初始化之前等待2秒钟

void OnCollisionEnter2D(Collision2D other)
{
    Die();
}

void Die()
{
    Application.LoadLevel(Application.loadedLevel);
}

有什么想法吗?

用2000初始化计时器并定义一个处理程序,如下所示:

//...
    Timer tmr = new Timer();
    tmr.Interval = 2000; // 20 seconds
    tmr.Tick += timerHandler;
    tmr.Start(); // The countdown is launched!
//...
private void timerHandler(object sender, EventArgs e) {
    //handle death
}
//...

使用2000初始化计时器并定义处理程序,如下所示:

//...
    Timer tmr = new Timer();
    tmr.Interval = 2000; // 20 seconds
    tmr.Tick += timerHandler;
    tmr.Start(); // The countdown is launched!
//...
private void timerHandler(object sender, EventArgs e) {
    //handle death
}
//...

使用2000初始化计时器并定义处理程序,如下所示:

//...
    Timer tmr = new Timer();
    tmr.Interval = 2000; // 20 seconds
    tmr.Tick += timerHandler;
    tmr.Start(); // The countdown is launched!
//...
private void timerHandler(object sender, EventArgs e) {
    //handle death
}
//...

使用2000初始化计时器并定义处理程序,如下所示:

//...
    Timer tmr = new Timer();
    tmr.Interval = 2000; // 20 seconds
    tmr.Tick += timerHandler;
    tmr.Start(); // The countdown is launched!
//...
private void timerHandler(object sender, EventArgs e) {
    //handle death
}
//...

如果你只是想让它在两秒钟后发生,你可以试试这个-

void OnCollisionEnter2D(Collision2D other)
{
    Invoke ("Die", 2.0f);
}

void Die()
{
    Application.LoadLevel(Application.loadedLevel);
}

如果你只是想让它在两秒钟后发生,你可以试试这个-

void OnCollisionEnter2D(Collision2D other)
{
    Invoke ("Die", 2.0f);
}

void Die()
{
    Application.LoadLevel(Application.loadedLevel);
}

如果你只是想让它在两秒钟后发生,你可以试试这个-

void OnCollisionEnter2D(Collision2D other)
{
    Invoke ("Die", 2.0f);
}

void Die()
{
    Application.LoadLevel(Application.loadedLevel);
}

如果你只是想让它在两秒钟后发生,你可以试试这个-

void OnCollisionEnter2D(Collision2D other)
{
    Invoke ("Die", 2.0f);
}

void Die()
{
    Application.LoadLevel(Application.loadedLevel);
}
试试这个:

void OnCollisionEnter2D(Collision2D other)
{
    Thread Dying = new Thread(()=>Die());
    Dying.Start(); //start a death in new thread so can do other stuff in main thread
}

void Die()
{
    Thread.Sleep(2000); //wait for 2 seconds
    Application.LoadLevel(Application.loadedLevel);
}
试试这个:

void OnCollisionEnter2D(Collision2D other)
{
    Thread Dying = new Thread(()=>Die());
    Dying.Start(); //start a death in new thread so can do other stuff in main thread
}

void Die()
{
    Thread.Sleep(2000); //wait for 2 seconds
    Application.LoadLevel(Application.loadedLevel);
}
试试这个:

void OnCollisionEnter2D(Collision2D other)
{
    Thread Dying = new Thread(()=>Die());
    Dying.Start(); //start a death in new thread so can do other stuff in main thread
}

void Die()
{
    Thread.Sleep(2000); //wait for 2 seconds
    Application.LoadLevel(Application.loadedLevel);
}
试试这个:

void OnCollisionEnter2D(Collision2D other)
{
    Thread Dying = new Thread(()=>Die());
    Dying.Start(); //start a death in new thread so can do other stuff in main thread
}

void Die()
{
    Thread.Sleep(2000); //wait for 2 seconds
    Application.LoadLevel(Application.loadedLevel);
}


你是说像“线程睡眠(…)”函数?你是说像“线程睡眠(…)”函数?你是说像“线程睡眠(…)”函数?你是说像“线程睡眠(…)”函数?这不正确,很抱歉指出,但:计时器将在其自己的线程上执行,因此它将有2个负面后果:1)如果游戏暂停,时间计算不准确。2) (最糟糕的)如果方法回调修改任何应该只从unity主线程修改的值,可能会导致异常。您可以在暂停时存储经过的时间量,在恢复时,您可以使用剩余时间创建另一个计时器。对于第二个问题,您可以在需要执行它的地方注册。我的回答解决了时间安排的问题,而不涉及计划细节。是的,这是标准的c#方式,当然。但关键是在unity engine内部,在典型的用例场景中,这将导致错误或非预期行为。相反,它提供了一些时间管理的工具,因为通常你想要的(以及OP要求的)是模拟时间,而不是经过的实时时间。这是不正确的,很抱歉指出,但是:计时器将在其自己的线程上执行,因此它将产生两个负面后果:1)如果游戏暂停,时间计算不准确。2) (最糟糕的)如果方法回调修改任何应该只从unity主线程修改的值,可能会导致异常。您可以在暂停时存储经过的时间量,在恢复时,您可以使用剩余时间创建另一个计时器。对于第二个问题,您可以在需要执行它的地方注册。我的回答解决了时间安排的问题,而不涉及计划细节。是的,这是标准的c#方式,当然。但关键是在unity engine内部,在典型的用例场景中,这将导致错误或非预期行为。相反,它提供了一些时间管理的工具,因为通常你想要的(以及OP要求的)是模拟时间,而不是经过的实时时间。这是不正确的,很抱歉指出,但是:计时器将在其自己的线程上执行,因此它将产生两个负面后果:1)如果游戏暂停,时间计算不准确。2) (最糟糕的)如果方法回调修改任何应该只从unity主线程修改的值,可能会导致异常。您可以在暂停时存储经过的时间量,在恢复时,您可以使用剩余时间创建另一个计时器。对于第二个问题,您可以在需要执行它的地方注册。我的回答解决了时间安排的问题,而不涉及计划细节。是的,这是标准的c#方式,当然。但关键是在unity engine内部,在典型的用例场景中,这将导致错误或非预期行为。相反,它提供了一些时间管理的工具,因为通常你想要的(以及OP要求的)是模拟时间,而不是经过的实时时间。这是不正确的,很抱歉指出,但是:计时器将在其自己的线程上执行,因此它将产生两个负面后果:1)如果游戏暂停,时间计算不准确。2) (最糟糕的)如果方法回调修改任何应该只从unity主线程修改的值,可能会导致异常。您可以在暂停时存储经过的时间量,在恢复时,您可以使用剩余时间创建另一个计时器。对于第二个问题,您可以在需要执行它的地方注册。我的回答解决了时间安排的问题,而不涉及计划细节。是的,这是标准的c#方式,当然。但关键是在unity engine内部,在典型的用例场景中,这将导致错误或非预期行为。相反,它提供了一些时间管理的工具,因为通常你想要的(以及OP要求的)是模拟时间,而不是实际经过的时间。这绝对是错误的。您这样阻塞了主线程。请解释一下?我总是这样做是为了在不中断应用程序其余部分的情况下使某些事情发生。抱歉..我的错误..实际上你没有阻止,因为你正在休眠另一个线程。但这仍然是危险的,因为您可能从非unity主线程调用方法(Die)。顺便说一下,因为我没有正确地阅读你的答案,如果你编辑,我可以考虑删除投票。这绝对是错误的。您这样阻塞了主线程。请解释一下?我总是这样做是为了在不中断应用程序其余部分的情况下使某些事情发生。抱歉..我的错误..实际上你没有阻止,因为你正在休眠另一个线程。但这仍然是危险的,因为您可能从非unity主线程调用方法(Die)。顺便说一下,因为我没有正确地阅读你的答案,如果你编辑,我可以考虑删除投票。这绝对是错误的。您这样阻塞了主线程。请解释一下?我总是这样做是为了让事情发生,而不会干扰res