2014-03-03 25 views

回答

5

可以使用线程在Unity但发动机不是线程安全的。通常你运行分离的线程(来自Unity UI)来执行长时间运行的进程并检查结果(你不能在工作线程中与Unity进行交互)。 常用的方法是使用一个代表线程的类,它将由Unity主线程初始化。然后你启动一个该类的函数的工作线程,并让它做它的工作(在Unity主线程上运行的协程,所以不是真正的线程。上面(见接受的答案):

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

您也可能想尝试一个UnityGems包,达到同样的效果,但提供了便利(如封闭的支持)。见this page

HTH。 最好!

+0

这是一个相当古老的问题,但由于我在这里冒险和任何以上的链接没有为我工作,这里是我发现有帮助 1. [好文章](http://www.albahari.com/threading/);和2.来自Unity Wiki的[作业队列示例](http://wiki.unity3d.com/index.php/JobQueue) – FullStackForger

+0

只需修复损坏的链接。最好 – German

3

根据我对Unity的个人经验,除非线程不使用Unity的任何API,否则不能创建/运行单独的线程。因此,这意味着没有gameObjects或类似性质的东西。我自己成功地完成了自己的寻路工作,所以我知道这是可能的。祝你好运!我希望这有帮助。

+2

这是正确的。只要该类不从MonoBehaviour继承,就可以在Unity中进行线程化。 – Esa

0

Unity3D中常用的代码是Coroutines

IEnumerator DoSth() 
{ 
    ... 
    yield retrun ... ;  
} 

呼叫/消费协程:

StartCoroutine(DoSth()); // OK 
StartCoroutine("DoSth"); // Also fine 
StopCoroutine("DoSth"); // You can stop it as well 
+1

协程并不是实际的线程。只有例如WWW功能才是真正的线程。 – Esa

+0

协程不是线程,它们不执行并行编程。 –

相关问题