我正在用人工智能做一个Unity3D国际象棋游戏。
我的游戏屏幕卡住了,而AI正在寻找一个好的移动。
人工智能通常需要5~30秒的时间才能思考。
我知道这是因为我的CPU资源致力于计算AI。
但是我打开任务管理器,我发现我的游戏只使用了50%的CPU,可能是因为我的电脑是英特尔核心2,并且有2个线程。
所以我想的是:
团结(或C#)是否有可能在一个线程中进行AI计算,并在另一个线程中保存游戏?
因此,玩家将不会看到卡住屏幕,而人工智能正在计算。
我听说过代表或事件,但我仍然不知道多线程之间的关系。
发布于 2015-08-21 15:34:04
您应该创建一个模型,该模型使用不引用Unity的类(编写的类)来表示您的游戏状态。这些课程应该只代表你的作品,以及它们在董事会中的位置。然后,您可以将该模型传递给运行在单独线程中的AI代码,在该线程中,它可以对模型进行评估并修改其以表示新的游戏状态。然后编写一些控制器代码,将模型映射为对GameObjects的调用(在联合的情况下是视图)。
通过以这种方式将模型从视图中分离出来,您可以获得各种优势,请参见:MVC
您可以使用.Net线程API来创建您的线程来执行AI处理,并且您可能希望使用Latch来控制游戏代码和AI线程之间的同步。请参阅:NET框架System.Threading
发布于 2016-08-13 01:42:27
统一的API不是线程安全的,您必须在主线程中执行它们。嗯,您可以在Asset上试用这个包,这将帮助您更容易地使用线程。http://u3d.as/wQg --您只需使用一行代码就可以启动线程并安全地执行Unity。
https://stackoverflow.com/questions/32134789
复制相似问题