是否有任何机构知道如何以统一方式执行异步任务。我正在寻找一段时间,但却找不到任何办法。 我正在尝试着色游戏,有一个泛洪填充算法,需要一些时间来处理。 谢谢你的帮助。
答案 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包,它可以实现相同的效果但提供方便(例如关闭支持):
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/
它也支持多线程。