如何在 Unity3D 中使用多线程进行 AI

How to use multithread in Unity3D for AI

我正在制作一个带有 AI 的 Unity3D 国际象棋游戏。

我的游戏画面卡住了,而 AI 正在寻找好棋。

AI正常思考需要5~30秒左右

我知道那是因为我的 CPU 资源专用于计算 AI。

但是我打开任务管理器,我发现我的游戏只用了50%CPU,可能是因为我的电脑是intel core 2,有2个线程。

所以我的想法是:

Unity(或C#)是否可以在一个线程中进行AI计算,并在另一个线程中进行游戏?

这样玩家就不会在AI计算时看到卡屏了。

听说过Delegate和Event,但还是不知道多线程的关系

您应该使用不引用 Unity API 的 类(您编写的)创建一个代表游戏状态的模型。这些 类 应该只代表你的棋子,以及它们在棋盘上的位置。然后,您可以在单独的线程中将此模型传递给您的 AI 代码 运行,它可以在其中对其进行评估和修改以表示新的游戏状态。然后,您编写一些控制器代码,将模型映射到对 GameObjects 的调用(Unity 案例中的视图)。

通过以这种方式从视图中拆分模型,您可以获得各种优势,请参阅:MVC

您可以使用 .Net 线程 API 创建线程来进行 AI 处理,并且您可能希望使用 Latch 来控制游戏代码和 AI 线程之间的同步。参见:NET Framework System.Threading

Unity的API不是线程安全的,你必须在主线程中执行它们。好吧,您可以在 Asset Store 上试用这个包,这将帮助您更轻松地使用线程。 http://u3d.as/wQg您可以仅使用一行代码来启动一个线程并安全地执行Unity API。