我正在开发一个国际象棋游戏在团结。我不是自己写人工智能,而是使用名为MadChess的国际象棋引擎。
我下载了引擎的源代码(用C#编写)以及名为“MadChess.exe”的可执行文件(它基本上是一个命令提示符,我们可以通过它按照UCI协议与引擎对话)。
我以前还没有把国际象棋引擎和统一项目集成在一起,也无法在网上找到很多关于如何做的资源。
方法1:最初,我在团结中编写了一个C#脚本,它创建了一个单独的进程来与"MadChess.exe“进行通信,但后来我意识到这种方法是错误的。这是因为当我将Unity构建为一个独立的Windows应用程序时,它依赖于位于我的PC上的物理"MadChess.exe“文件--也就是说,它不会将所有东西(我的统一项目代码和象棋引擎代码)一起构建到一个可执行的应用程序中。根据我的说法,这是错误的,只能通过创建游戏的安装程序来纠正,该安装程序将"MadChess.exe“文件与我的主统一代码一起注入。
方法2:现在,我正在尝试浏览MadChess象棋引擎项目的源代码,并基本上创建国际象棋引擎项目的.dll文件,我计划在我的统一项目中使用这些文件作为插件。最终,我会通过C#代码与他们进行接口。这样做对不对?
我被困在这大约一个星期,仍然无法找到一个明确的方式。我不想再花一个星期的时间来意识到我做错了。即使我从一开始就错了,请告诉我。我只是想集成一个国际象棋引擎与我的团结项目。如果有人有任何建议或想法,或如果有人曾经这样做过,请指导我。我会很感激的。谢谢你一直陪着我。
发布于 2018-05-13 13:52:14
我建议使用方法1
这两种方法听起来都是有效的,但我建议使用方法1作为一个过程与MadChess.exe进行通信,因为这比方法2要少得多,特别是如果您已经使用了第一个方法(除了构建问题)。
此外,除了源代码之外,如果MadChess项目只提供exe而不是dll文件,那么我认为坚持该项目“建议”的方法更安全。当您尝试自己创建dll文件时,您不知道会遇到什么样的问题(听起来您已经遇到了问题)。
尽管应该可以使用dll文件,但我认为最好选择一种方法,让您在项目上取得更快的进展。如果遇到其他问题,以后总是可以切换到方法2。
(只需确保在找不到MadChess.exe时显示适当的错误,以便您可以快速解决问题。)
如何将MadChess.exe作为构建的一部分
您不一定需要安装程序将MadChess.exe文件包含在游戏中。您还可以将MadChess.exe复制为建立播放器管道的一部分。使用BuildPipeline.BuildPlayer或PostProcessBuildAttribute,您可以获得构建项目的路径,然后在构建步骤中使用FileUtil.CopyFileOrDirectory复制MadChess.exe。
此外,正如@阿德里安·斯格罗在一条评论中提到的那样,StreamingAssets也同样有效。(但请注意,文档明确提到,如果需要包含任何dll依赖项,则不包括此文件夹中的.dll文件。)
https://stackoverflow.com/questions/50309449
复制相似问题