Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Unity中使用多线程生成对象_C#_Multithreading_Unity3d_Artificial Intelligence_Path Finding - Fatal编程技术网

C# 在Unity中使用多线程生成对象

C# 在Unity中使用多线程生成对象,c#,multithreading,unity3d,artificial-intelligence,path-finding,C#,Multithreading,Unity3d,Artificial Intelligence,Path Finding,我是一个初学者程序员。我想创建一个类似于中间件的Objectspawner,它在多线程中处理寻路脚本,然后将其传递回Gameobject执行。基本上,每个调用寻路的对象的计算过程都将由不同的线程处理。我应该学习什么来创建它?虽然可以在Unity中启动单独的线程,但它自己的API不支持来自它的主线程的任何其他线程的调用,它在主线程中执行脚本。实例化对象是不在主线程中时最不希望执行的操作。为什么您认为您需要线程?这是可能的。您可以在另一个线程中使用Unity的结构和数学API,如Vector3、Ve

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

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

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

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


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

每个对象使用一个线程不是一个好主意。我不知道单元是如何处理线程的,但是创建线程需要花费大量的时间,最好少启动线程,在一个线程上处理多个路径。是的,我刚刚意识到这一点。我想我用了一个错误的表达。你可以在统一中使用新的工作制度。我不确定它是否已经推出,但如果是这样,这将大大简化您的任务。使用多线程的主要原因是什么?对于多线程,应该有两种可能的替代方法。是的。我知道Unity API不支持多线程。比较单线程和多线程是我任务的一部分。它就像一个程序,在多线程中处理AI scipt,并将其传递给NPC对象执行。是否可以在线程中处理脚本行为,然后在主线程中实例化对象?这是可能的,但需要处理线程之间的争用条件。如果你的应用程序只需要运行一次就可以通过,那么你可以在主线程中存储一个列表,但请记住,当你开始从多个线程修改列表时,可能会发生一些不好的事情