如何在Unity3D中执行异步任务?

时间:2014-01-21 15:11:49

标签: asynchronous unity3d

是否有任何机构知道如何以统一方式执行异步任务。我正在寻找一段时间,但却找不到任何办法。 我正在尝试着色游戏,有一个泛洪填充算法,需要一些时间来处理。 谢谢你的帮助。

5 个答案:

答案 0 :(得分:10)

您可以使用Unity中的线程来执行异步操作。通常,您运行分离的线程(来自Unity UI)来执行长时间运行的进程并检查结果(您无法从工作线程与Unity交互)。 常见的方法是使用一个代表线程作业的类,它将由Unity主线程初始化。然后你在该类的函数上启动一个工作线程并让它完成它的工作(Coroutines在Unity主线程上运行所以不是真正的线程。关于Coroutines的最佳文章是here

以上是上述方法的一个示例(参见接受的答案):

http://answers.unity3d.com/questions/357033/unity3d-and-c-coroutines-vs-threading.html

您可能还想尝试UnityGems包,它可以实现相同的效果但提供方便(例如关闭支持):

http://unitygems.com/threads/

HTH。 最好!

答案 1 :(得分:5)

您可以使用C#线程来进行异步工作。您可以在here上找到有关线程的更多信息。

您必须注意,您无法从工作线程与Unity交互,因此在完成工作后,您必须使用Unity线程中的结果。您只需在将执行更新的MonoBehaviour上设置一个标志并检查Update方法中的标志即可。类似的东西:

void Update()
{
  if( _workDone )
  {
   ...display it
  }
}

答案 2 :(得分:3)

您现在可以直接在Unity 2017中使用异步等待任务。更多详细信息here

答案 3 :(得分:1)

使用CoRoutine你可以设置它们,并在每一帧执行它的一小部分来对代码进行时间分片。 co routines

答案 4 :(得分:0)

我知道这个问题已经过时了,但它仍然非常重要。我在我的开源框架中编写了自己的解决方案。如果您有兴趣,可以在这里找到所有信息:

http://www.sebaslab.com/svelto-taskrunner-run-serial-and-parallel-asynchronous-tasks-in-unity3d/

它也支持多线程。