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!")
Ответы
Ответ 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]()