【发布时间】:2014-04-03 20:39:14
【问题描述】:
我需要在线程中加载文件、场景和播放动画.. 尝试在 Android 中通过 www 加载文件... 如何通过线程做其他事情? 但是为什么游戏引擎不允许我们创建线程呢? 还是我的理解有误? 如何在 UNITY3D 中创建线程?
【问题讨论】:
标签: multithreading unity3d coroutine
我需要在线程中加载文件、场景和播放动画.. 尝试在 Android 中通过 www 加载文件... 如何通过线程做其他事情? 但是为什么游戏引擎不允许我们创建线程呢? 还是我的理解有误? 如何在 UNITY3D 中创建线程?
【问题讨论】:
标签: multithreading unity3d coroutine
您可以在 Unity 中使用线程,但引擎不是线程安全的。通常,您运行分离的线程(从 Unity UI)来执行长时间运行的进程并检查结果(您不能从工作线程与 Unity 交互)。 常见的方法是使用一个代表线程作业的类,该线程作业将由 Unity 主线程初始化。然后在该类的函数上启动一个工作线程并让它完成工作(协程在 Unity 主线程上运行,因此不是真正的线程。关于协程的最佳文章是 here)
这是上述方法的一个示例(请参阅已接受的答案):
http://answers.unity3d.com/questions/357033/unity3d-and-c-coroutines-vs-threading.html
您可能还想尝试实现相同效果但提供便利(例如闭包支持)的 UnityGems 包。见this page
HTH。 最好的!
【讨论】:
根据我个人使用 Unity 的经验,您不能创建/运行单独的线程,除非该线程不使用 Unity 的任何 api。所以这意味着没有游戏对象或类似性质的东西。我自己已经成功地完成了自己的寻路工作,所以我知道这是可能的。祝你好运!我希望这会有所帮助。
【讨论】:
Unity3D 中一个常用的方法是使用Coroutines。
IEnumerator DoSth()
{
...
yield retrun ... ;
}
调用/使用协程:
StartCoroutine(DoSth()); // OK
StartCoroutine("DoSth"); // Also fine
StopCoroutine("DoSth"); // You can stop it as well
【讨论】: