我正在制作带有AI的Unity3D国际象棋游戏。
当AI正在寻找一个好动作时,我的游戏画面停滞不前。
人工智能通常需要5~30秒才能思考。
我知道这是因为我的CPU资源专门用于计算AI。
但是我打开任务管理器,我发现我的游戏只占CPU的50%,可能是因为我的计算机是intel core 2,并且有2个线程。
所以我想的是:
Unity(或C#)是否可以在一个线程中进行AI计算,并将游戏玩法保存在另一个线程中?
因此,当AI正在计算时,玩家不会看到卡住的屏幕。
我听过代表或活动,但我还不知道多线程之间的关系。
答案 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。