Unity c#场景管理器加载场景未从任务运行。延迟
在这个项目中,在一些代码中,延迟被启动,然后继续执行Unity c#场景管理器加载场景未从任务运行。延迟,c#,unity3d,C#,Unity3d,在这个项目中,在一些代码中,延迟被启动,然后继续执行Debug.Log(“Test”)和SceneManager.LoadScene(…) (我使用UnityEngine.SceneManager;) 整个事情看起来像: Task.Delay(2).ContinueWith(t => { Debug.Log("Test"); SceneManager.LoadScene(SceneManager.GetActiveScene().name); }); 发生了什么: 控制台打印“测试”
Debug.Log(“Test”)代码>和SceneManager.LoadScene(…)代码>
(我使用UnityEngine.SceneManager;
)
整个事情看起来像:
Task.Delay(2).ContinueWith(t => { Debug.Log("Test"); SceneManager.LoadScene(SceneManager.GetActiveScene().name); });
发生了什么:
控制台打印“测试”
但这一幕并没有开始。我还测试了加载另一个场景,但什么也没发生。
有人知道您是否无法在延迟功能中加载场景吗?)
(控制台中没有错误)我不是unity专家,但我看到添加了async/await,所以您可以做您想做的事情……有点像。不过,你不想像拥有它那样去做。我在这里更一般地依赖于异步/等待的知识…ContinueWith将在默认调度器的控制下调度继续…可能在线程池线程上,而这不是您想要的。事实上,我敢打赌,在你这样做的过程中,会发生一个异常…我猜这是因为你没有在主线程上调用LoadScene。相反,您可以只执行以下操作:
await Task.Delay( 2 );
Debug.Log("Test");
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
wait的工作方式是,当前方法中的其余代码将作为当前线程上的延续进行注册。因此,您将获得所需的行为:2秒钟的延迟,然后是代码的剩余部分。您不能像这样在Unity中使用线程。你应该使用协同程序。非常感谢,我会试试的