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

mak*_*uzu 15 asynchronous unity-game-engine

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

Ger*_*man 10

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

以下是上述方法的示例(请参阅已接受的答案):

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

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

http://unitygems.com/threads/

HTH.最好!


Rad*_*iță 5

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

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

void Update()
{
  if( _workDone )
  {
   ...display it
  }
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*len 5

现在,您可以在 Unity 2017 中直接将 async wait 与 Task 结合使用。更多详细信息请参见此处


Cth*_*Jon 0

使用 CoRoutine,您可以设置它们,并每帧执行其中的一小部分,以对代码进行时间切片。 共同例程

  • 您嵌入的链接转到 IEnumerator :/ 这是故意的吗?也许我不明白一些事情.. (8认同)
  • 因提供不相关的链接而被否决。[使用它们的教程](https://unity3d.com/learn/tutorials/topics/scripting/coroutines) @Dawson 可以在 Unity 的站点上找到。 (2认同)