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

时间:2015-08-21 07:34:38

标签: c# multithreading unity3d delegates artificial-intelligence

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

当AI正在寻找一个好动作时,我的游戏画面停滞不前。

人工智能通常需要5~30秒才能思考。

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

但是我打开任务管理器,我发现我的游戏只占CPU的50%,可能是因为我的计算机是intel core 2,并且有2个线程。

所以我想的是:

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

因此,当AI正在计算时,玩家不会看到卡住的屏幕。

我听过代表或活动,但我还不知道多线程之间的关系。

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

Unity的API不是线程安全的,你必须在主线程中执行它们。那么你可以在资源商店试试这个包将帮助你更容易地使用线程。 http://u3d.as/wQg您只需使用一行代码即可启动线程并安全地执行Unity API。