UnityPython работает в редакторе, но не в Build - PullRequest
1 голос
/ 25 сентября 2019

Я делаю игру, в которой игрок выполняет код Python для перемещения персонажа.Я сделал это с помощью UnityPython , который по сути является просто IronPython, интегрированным в Unity.Это работает так: код, вводимый игроком, заключен в скрипт Python.Затем этот скрипт запускается в другом потоке (это работает из оболочки, используя класс threading Python), который связывается с Unity для перемещения игрока.Эта система прекрасно работает в редакторе, но не в сборке.

Сначала я обнаружил, что проблема заключается в том, что поисковые пути, используемые механизмом сценариев, не находят нужную папку библиотеки (поскольку сам UnityPythonнаходится в папке активов).Конкретные классы, которые мне нужны, это threading и Queue.

Инициализатор движка выглядит так:

var engine = UnityPython.CreateEngine();
var paths = engine.GetSearchPaths();
paths.Add(Application.dataPath + "/Python/Lib");
engine.SetSearchPaths(paths);

Один из обходных путей, о котором я подумал, - это просто копирование папки Pythonв папку StreamingAssets, а затем с помощью Application.streamingAssetsPath в третьей строке.Но затем отладчик сборки dev выдает мне странную ошибку:

System.TypeInitializationException: инициализатор типа для CodecsInfo вызвал исключение.---> System.NotSupportedException: кодировка 37 данных не найдена.Убедитесь, что у вас установлена ​​и включена правильная сборка международных кодовых наборов.

Вот где я застрял прямо сейчас.Любые мысли о том, что означает эта ошибка и как ее обойти?

Редактировать: похоже, проблема возникает, когда скрипт используется движком.Код здесь выглядит так:

try
{
    var source = engine.CreateScriptSourceFromFile(scriptPath);
    source.Compile();
    // script here is a dynamic variable
    script = engine.Runtime.UseFile(scriptPath); // this is where the error is thrown
    script.GameManager = this;
    script.start();
}
catch (Exception e)
{
    Debug.Log("Error: " + e);
}
...