24

我正在尝试使用 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>

该脚本和“UnityEngine.dll”位于同一文件夹中。这是脚本:

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

import UnityEngine
from UnityEngine import *

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

1 回答 1

19

因此,从 Unity 脚本中:

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

在 python 脚本中(我的是 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)));

然后在脚本中使用它:

import MyPlayerScriptOrSomething

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

编辑#3

IronPython DLL 应该放在“Assets”下的某个“Plugins”文件夹中(最简单的是: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

我使用的版本是:

在此处输入图像描述

于 2012-08-01T20:25:13.437 回答