【问题标题】:Spawn object with Multithread in Unity在 Unity 中使用多线程生成对象
【发布时间】:2018-05-14 06:36:37
【问题描述】:

我是一名初级程序员。我想创建一个类似于中间件的 Objectspawner,在多线程中处理 Pathfinding 脚本,然后将其传递回 Gameobject 执行。基本上每个需要寻路的对象,计算过程都会由不同的线程来处理。我应该学习什么来创建这个?

【问题讨论】:

  • 每个对象使用 1 个线程并不是一个好主意。我不知道Unit是如何处理线程的,但是创建线程会花费很多时间,而且你最好启动更少的线程并在单个线程上处理多个路径。
  • 是的,我才意识到这一点。我想我用了错误的表达方式。
  • 您可以在 Unity 中使用新的作业系统。我不确定它是否已经发布,但如果是这样,这将大大简化您的任务。
  • 多线程的主要原因是什么?应该有几个可能适用的多线程替代方案。

标签: c# multithreading unity3d artificial-intelligence path-finding


【解决方案1】:

这是可能的。您可以在另一个线程中使用 Unity 的结构和数学 API,例如 Vector3Vector2Mathf

获取对象的位置,将其存储在Vector3Vector2 中,然后启动一个新线程并将Vector 传递给它。您可以在新线程中完成所有寻路工作。

当您需要更新对象的位置或使用来自新Thread 的修改后的向量时,请使用我的另一个post 中的UnityThread.executeInUpdate 函数来执行此操作。此函数允许您从另一个线程调用 Unity API。如果您不想使用我的,您可以自己制作,或者您可以阅读该帖子的制作方法,然后从中制作自己的。

【讨论】:

    【解决方案2】:

    虽然它可以在 Unity 中启动单独的线程,但它自己的 API 不支持来自其主线程的任何其他线程的调用,它在其中执行您的脚本。实例化对象是您不在主线程中时要做的最后一件事。为什么你认为你需要线程?

    【讨论】:

    • 是的。我知道 Unity API 不支持多线程。比较单线程和多线程是我分配的一部分。它就像一个程序,在多线程中处理 AI scipt 并将其传递给 NPC 对象执行。是否可以在线程中处理脚本行为,然后在主线程中实例化对象?
    • 可以但需要处理线程之间的竞争条件。如果您的应用只需要运行一次即可通过,那么您可以在主线程中存储一个列表,但请记住,当您开始从多个线程修改列表时可能会发生丑陋的事情
    猜你喜欢
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    相关资源
    最近更新 更多