【问题标题】:how to use c# threads in unity3d for android platform?如何在unity3d中为android平台使用c#线程?
【发布时间】:2014-04-03 20:39:14
【问题描述】:

我需要在线程中加载文件、场景和播放动画.. 尝试在 Android 中通过 www 加载文件... 如何通过线程做其他事情? 但是为什么游戏引擎不允许我们创建线程呢? 还是我的理解有误? 如何在 UNITY3D 中创建线程?

【问题讨论】:

标签: multithreading unity3d coroutine


【解决方案1】:

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

这是上述方法的一个示例(请参阅已接受的答案):

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

您可能还想尝试实现相同效果但提供便利(例如闭包支持)的 UnityGems 包。见this page

HTH。 最好的!

【讨论】:

  • 这是一个很老的问题,但是因为我在这里冒险并且上面的任何链接都对我不起作用,所以这是我发现有帮助的内容 1.good article;和 2. job queue example 来自 Unity Wiki
  • 刚刚修复了损坏的链接。最佳
  • 我还建议查看 this article 以更好地了解 I/O 绑定(例如读取文件)和 CPU 绑定操作之间的区别。然后,尝试在 these guidelines 之后采用 Unity3D 中的 async/await 模式。
【解决方案2】:

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

【讨论】:

  • 这是正确的。只要类不从 MonoBehaviour 继承,您就可以在 Unity 中进行线程处理。
【解决方案3】:

Unity3D 中一个常用的方法是使用Coroutines

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

调用/使用协程:

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

【讨论】:

  • 协程不是真正的线程。只有例如 WWW 功能是真正线程化的。
  • 协程不是线程,它们不进行并行编程。
猜你喜欢
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多