Подтвердить что ты не робот

IronPython в Unity3D

Я пытаюсь использовать IronPython в качестве внешнего скриптового языка для Unity3D. Необходимые библиотеки DLL для выполнения IronPython загружаются только в пределах объектов Assets\Plugins. Однако, когда я пытаюсь запустить script, я получаю эту ошибку:

PythonImportErrorException: No module named UnityEngine
IronPython.Modules.Builtin.__import__ (IronPython.Runtime.Calls.ICallerContext,string,object,object,object) <IL 0x0003b, 0x001cc>
(wrapper dynamic-method) object.__import__##5 (IronPython.Runtime.Calls.ICallerContext,object,object,object,object) <IL 0x0000e, 0x0004d>
IronPython.Runtime.Calls.FastCallableWithContextAny.Call (IronPython.Runtime.Calls.ICallerContext,object,object,object,object) <IL 0x00015, 0x00067>
IronPython.Runtime.Calls.BuiltinFunction.Call (IronPython.Runtime.Calls.ICallerContext,object,object,object,object) <IL 0x0000d, 0x00058>
IronPython.Runtime.Operations.Ops.CallWithContext (IronPython.Runtime.Calls.ICallerContext,object,object,object,object,object) <IL 0x00012, 0x000b0>
IronPython.Runtime.Importer.Import (IronPython.Runtime.PythonModule,string,IronPython.Runtime.List) <IL 0x0000d, 0x0006c>
IronPython.Runtime.Operations.Ops.Import (IronPython.Runtime.PythonModule,string) <IL 0x00007, 0x0003b>
(wrapper dynamic-method) object.<string>##1 (IronPython.Runtime.ModuleScope) <IL 0x0006b, 0x00210>

script и "UnityEngine.dll" находятся в одной папке. Это script:

import clr
clr.LoadAssemblyFromFile("UnityEngine.dll")

import UnityEngine
from UnityEngine import *

Debug.Log("Hello World from Python!")
4b9b3361

Ответ 1

Итак, из Unity script:

PythonEngine engine = new PythonEngine();
engine.LoadAssembly(Assembly.GetAssembly(typeof(GameObject)));
engine.ExecuteFile("apple.py");

И внутри python script (мой был apple.py, расположенный в той же папке, что и файл game.exe):

import UnityEngine
from UnityEngine import *

Debug.Log("Hello From IronPython!")

Изменить # 1

Я должен отметить, что причина, по которой я получал ошибку раньше, состояла в том, что версия выполнения была указана как 4.0 вместо 3.5 или ниже.

Изменить # 2

Если вам нужно получить доступ к своим скриптам из IronPython, вы также можете загрузить свою сборку, выполнив следующие действия:

engine.LoadAssembly(Assembly.GetAssembly(typeof(MyPlayerScriptOrSomething)));

Затем, чтобы использовать его в script:

import MyPlayerScriptOrSomething

Обратите внимание, что вам не нужно делать LoadAssembly для каждого script, только один раз, чтобы получить сборку.

Изменить # 3

Библиотеки IronPython должны быть помещены в папку "Плагины" где-то в разделе "Активы" (наиболее просто: Assets- > Plugins). Вот моя настройка:

> Assets
> > Plugins
> > > IronMath.dll
> > > IronPython.dll
> > > Microsoft.Scripting.dll
> > > Microsoft.Scripting.Core.dll

Изменить # 4

Ваши сценарии можно поместить в любую папку, в которой ваша программа имеет к ним доступ. Например, если вы хотите поместить "apple.py" непосредственно в "C: \", вы можете выполнить этот файл, выполнив:

engine.ExecuteFile(@"c:\apple.py");

Изменить # 5

Используемая версия:

enter image description here