Mono Unity3D中的IronPython

Mono Unity3D中的IronPython,mono,ironpython,unity3d,Mono,Ironpython,Unity3d,我正在尝试使用IronPython作为Unity3D的外部脚本语言。IronPython执行负载所需的DLL在Assets\Plugins中很好。但是,当我尝试运行脚本时,出现以下错误: PythonImportErrorException: No module named UnityEngine IronPython.Modules.Builtin.__import__ (IronPython.Runtime.Calls.ICallerContext,string,object,object,

我正在尝试使用IronPython作为Unity3D的外部脚本语言。IronPython执行负载所需的DLL在Assets\Plugins中很好。但是,当我尝试运行脚本时,出现以下错误:

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>

因此,从统一脚本:

PythonEngine engine = new PythonEngine();
engine.LoadAssembly(Assembly.GetAssembly(typeof(GameObject)));
engine.ExecuteFile("apple.py");
python脚本内部(我的是apple.py,与game.exe位于同一文件夹中):

编辑#1 我应该注意到,我之前收到错误的原因是因为运行时版本被指定为4.0,而不是3.5或更低版本

编辑#2 如果需要从IronPython访问脚本,也可以通过执行以下操作加载程序集:

engine.LoadAssembly(Assembly.GetAssembly(typeof(MyPlayerScriptOrSomething)));
engine.ExecuteFile(@"c:\apple.py");
然后在脚本中使用它:

import MyPlayerScriptOrSomething
请注意,您不必为每个脚本执行LoadAssembly,只需执行一次即可获得程序集

编辑#3 IronPython DLL应该放在“资产”下的“插件”文件夹中(最简单的方式是:资产->插件。以下是我的设置:

> Assets
> > Plugins
> > > IronMath.dll
> > > IronPython.dll
> > > Microsoft.Scripting.dll
> > > Microsoft.Scripting.Core.dll
编辑#4 您的脚本可以放在程序可以访问的任何地方。例如,如果您想将“apple.py”直接放在“C:\”下,您可以通过执行以下操作来执行该文件:

engine.LoadAssembly(Assembly.GetAssembly(typeof(MyPlayerScriptOrSomething)));
engine.ExecuteFile(@"c:\apple.py");
编辑#5 我使用的版本是:


出于兴趣:为什么要使用IronPython?它允许我使用构建在Mono之上的Unity3D。NETUnity3d支持开箱即用的Boo,这与Python非常接近;我想知道为什么你要专门将IronPython插入其中。另外,Boo不是Python:不同的语法,没有“电池”(为您完成所有艰苦工作的标准库)。实际上没有boo的现有示例或代码片段。boo…真的不是Python。哦,它看起来也很死气沉沉。(我非常非常不喜欢它的C#ish导入语句…当您将它们与Python进行比较时,原因显而易见)在开发模式下使用Unity时(在构建可执行文件之前),您是否能够运行python脚本。我只是想弄清楚IronPython.dll放在哪里(我假设是库/脚本程序集)还有我的python文件放在哪里。任何提示都会很好。@desimusxvii我更新了原始帖子以反映您问题的答案。@StormKiernan您是否在.NET 2.0中使用了Python2.6?我正在尝试复制它,但运气不太好:)@StormKiernan my DLL似乎没有PythonEngine类,因此我无法调用LoadAssembrly。我遇到的错误与您之前遇到的相同。@RadiantHex我已使用IronPython.DLL的版本信息更新了我的帖子。