Как правильно интегрировать внешний ChessEngine с моим проектом Unity?
Я занимаюсь шахматной игрой в Unity. Я пишу не AI самостоятельно, а использую шахматный движок MadChess.
Я загрузил исходный код движка (который написан на C#), а также исполняемый файл с именем " MadChess.exe " (который в основном представляет собой командную строку, через которую мы можем общаться с движком, следуя протоколам UCI)
Я на самом деле раньше не интегрировал шахматный движок с проектом Unity, а также не смог найти много ресурсов в Интернете о том, как это сделать.
Подход 1. Первоначально я написал сценарий C# в Unity, который создает отдельный процесс для связи с " MadChess.exe ", но позже я понял, что этот подход содержит ошибки. Это связано с тем, что когда я создаю свой Unity Project как отдельное приложение для Windows, он зависит от физического файла " MadChess.exe ", расположенного на моем ПК, то есть он не собирает все (код моего проекта Unity вместе с кодом Chess Engine) вместе в одном исполняемом приложении. По моему мнению, это ошибочно и может быть исправлено только путем создания установщика игры, который внедряет файл " MadChess.exe " вместе с моим основным кодом Unity.
Подход 2: Теперь я пытаюсь просмотреть исходный код проекта шахматного движка MadChess и в основном создаю.dll-файлы проекта шахматного движка, которые я планирую использовать в качестве плагинов в своем проекте Unity. Я бы в конечном итоге взаимодействовал с ними через мой код C# в Unity. Это правильный путь или нет?
Я застрял в этом около недели или около того и до сих пор не могу найти ясный путь. Я не хочу тратить еще одну неделю, чтобы понять, что я делаю это неправильно. Даже если я ошибаюсь с самого начала, пожалуйста, дайте мне знать. Я просто хочу интегрировать шахматный движок с моим проектом Unity. Если у кого-то есть какие-либо предложения или идеи или кто-то уже делал это, пожалуйста, направьте меня. Буду признателен. Спасибо, что терпели меня здесь.
1 ответ
Я рекомендую использовать подход 1
Оба подхода звучат корректно, но я рекомендую использовать подход 1 для взаимодействия с MadChess.exe как процесс, потому что это гораздо меньше работы, чем подход 2, особенно если у вас уже работает первый подход (кроме проблемы сборки).
Кроме того, кроме исходного кода, если проект MadChess предоставляет только exe
а не файлы dll, тогда я думаю, что безопаснее придерживаться подхода, который неявно "рекомендован" проектом. Вы не знаете, с какими проблемами вы столкнетесь, когда попытаетесь сами создать файлы dll (и, похоже, вы уже столкнулись с проблемами).
Несмотря на то, что должна быть возможность использовать DLL-файлы, я думаю, что предпочтительнее выбрать подход, который позволит вам быстрее прогрессировать в вашем проекте. Вы всегда можете переключиться на подход 2 позже, если столкнетесь с другими проблемами.
(Просто убедитесь, что отображаются соответствующие ошибки в случае, если MadChess.exe не найден, чтобы вы могли быстро устранять неполадки.)
Как включить MadChess.exe как часть вашей сборки
Вам не обязательно нужен установщик, чтобы включить файл MadChess.exe в вашу игру. Вы также можете скопировать MadChess.exe как часть Build Player Pipeline. Используя либо BuildPipeline.BuildPlayer
или PostProcessBuildAttribute
, вы можете получить путь к построенному проекту, а затем использовать FileUtil.CopyFileOrDirectory
скопировать MadChess.exe на этапе сборки.
Кроме того, как @AdrianSgro упоминается в комментарии, StreamingAssets
работает так же. (Но обратите внимание, что в документации явно упоминается, что файлы DLL в этой папке не включены, если вам нужно включить какие-либо зависимости dll.)