0

我正在 Unity 中开发国际象棋游戏。我不是自己编写人工智能,而是使用名为MadChess的国际象棋引擎。

我下载了引擎的源代码(用 C# 编写)以及名为“ MadChess.exe ”的可执行文件(基本上是一个命令提示符,通过它我们可以按照UCI协议与引擎对话)

我之前实际上没有将国际象棋引擎与统一项目集成,也无法在网上找到很多关于如何做到这一点的资源。

方法 1: 最初,我在 Unity 中编写了一个 C# 脚本,它创建了一个单独的进程来与“ MadChess.exe ”通信,但后来我意识到这种方法有问题。这是因为当我将 Unity 项目构建为 Windows 的独立应用程序时,它依赖于位于我的 PC 上的物理“ MadChess.exe ”文件,即它不会构建所有内容(我的 Unity 项目代码以及国际象棋引擎代码) 一起成为一个可执行的应用程序。这在我看来是错误的,只能通过创建游戏安装程序来纠正,该安装程序将“ MadChess.exe ”文件与我的主要 Unity 代码一起注入。

方法 2: 现在,我正在尝试浏览 MadChess 国际象棋引擎项目的源代码,并基本上创建国际象棋引擎项目的 .dll 文件,我计划将其用作我的 Unity 项目中的插件。我最终会通过我在 Unity 中的 C# 代码与他们交互。这是正确的方法吗?

我被困在这个问题上大约一个星期左右,但仍然无法找到明确的方法。我不想再花一个星期才意识到我做错了。即使我从一开始就错了,请告诉我。我只是想将国际象棋引擎与我的 Unity 项目集成。如果有人有任何建议或想法,或者之前有人这样做过,请指导我。我将感激不尽。谢谢你一直陪我到这里。

4

1 回答 1

0

我建议使用方法 1

这两种方法听起来都有效,但我建议使用方法 1 作为一个进程与MadChess.exe进行通信,因为这比方法 2 的工作量要少得多,特别是如果您已经使用了第一种方法(除了构建问题)。

此外,除了源代码之外,如果 MadChess 项目仅提供exedll 文件而不提供 dll 文件,那么我认为坚持使用项目隐含“推荐”的方法会更安全。当您尝试自己制作 dll 文件时,您不知道会遇到什么样的问题(听起来您已经遇到了问题)。

尽管应该可以使用 dll 文件,但我认为最好选择能让您更快地推进项目的方法。如果您遇到其他问题,您可以随时切换到方法 2。

(只要确保在未找到MadChess.exe的情况下显示适当的错误,以便您可以快速解决问题。)

如何将 MadChess.exe 作为构建的一部分包含在内

您不一定需要安装程序来将MadChess.exe文件包含在您的游戏中。您还可以将MadChess.exe复制为Build Player Pipeline的一部分。使用BuildPipeline.BuildPlayerPostProcessBuildAttribute,您可以获得构建项目的路径,然后在构建步骤中FileUtil.CopyFileOrDirectory用于复制MadChess.exe 。

此外,正如@AdrianSgro 在评论中提到的那样,StreamingAssets它也有效。(但请注意,文档明确提到如果您需要包含任何 dll 依赖项,则不包含此文件夹中的 .dll 文件。)

于 2018-05-13T13:52:14.617 回答