Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WaitHandle和线程出错。睡眠_C#_Unity3d_Unity2d - Fatal编程技术网

C# WaitHandle和线程出错。睡眠

C# WaitHandle和线程出错。睡眠,c#,unity3d,unity2d,C#,Unity3d,Unity2d,我在这里四处寻找让我的脚本等待几秒钟的方法,找到了人们推荐的。我使用了一些代码,并在我的游戏中使用它来让它等待,但它并没有按照我希望的那样运行。我将它放在两个Debug.Log行之间,但它会等待指定的时间,然后同时记录这两个事件,而不是在第一个事件触发后等待 static void Waiter(){ waitHandle.WaitOne (); } Debug.Log (choice); new Thread (Waiter).Start (); Thread.Sleep (5

我在这里四处寻找让我的脚本等待几秒钟的方法,找到了人们推荐的。我使用了一些代码,并在我的游戏中使用它来让它等待,但它并没有按照我希望的那样运行。我将它放在两个Debug.Log行之间,但它会等待指定的时间,然后同时记录这两个事件,而不是在第一个事件触发后等待

static void Waiter(){
    waitHandle.WaitOne ();
}
Debug.Log (choice);

new Thread (Waiter).Start ();   
Thread.Sleep (5000);
waitHandle.Set ();

Debug.Log (enemyChoice);

为了在统一中等待,您可以使用协程和。您也可以将协同程序与或一起使用,但最简单的方法是使用。请注意,如果使用Thread.Sleep等待,整个程序将冻结。不要这样做,因为UI也不会有响应

void Start()
{
    StartCoroutine(doSomethingThenWait());
}

IEnumerator doSomethingThenWait()
{
    UnityEngine.Debug.Log("Before Waiting");
    //Wait for 2 Seconds
    yield return new WaitForSeconds(2);
    UnityEngine.Debug.Log("After Waiting");
}

你能分享你用来做这件事的实际代码吗?你不应该在Unity游戏中使用Thred.Sleap。去寻找unity特定的教程。您只需要一个协程,然后等待SecondScan您可以解释启动协程和IEnumerator部分的作用。请启动协程,然后等待函数启动。您可以像普通函数一样直接调用doSomethingThenWait。您必须使用StartCustomer来调用它。IEnumerator是函数的返回类型,允许您使用startCustomer调用它。你应该在谷歌上搜索Unity协程教程并了解更多信息。非常感谢你。我测试了这段代码,但它并没有按照我所希望的方式工作,我将协程部分放在两个不同的debug.log行之间,希望它能显示第一个,然后在等待前显示,然后在等待后显示,然后是第二个debug.log。然而,我得到的是,第一个debug.log,在等待之前,第二个debug.log-然后是2秒钟的中断,然后是等待之后。我怎样才能得到它,使程序按我所希望的那样正确地等待?