在IronPython的Unity3D(IronPython in Unity3D)

2019-07-30 17:51发布

我试图使用IronPython的作为外部脚本语言Unity3D。 对于IronPython的的执行负载只是资产\插件的精细内必要的DLL。 然而,当我尝试运行脚本,我得到这个错误:

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!")

Answer 1:

因此,从一个统一的脚本:

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
> > > IronMath.dll
> > > IronPython.dll
> > > Microsoft.Scripting.dll
> > > Microsoft.Scripting.Core.dll

编辑#4

你的脚本可以在任何地方把你的程序可以访问它们。 举例来说,如果你想把它放到“apple.py”直属“C:\”,你可以通过做执行该文件:

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

编辑#5

我使用的版本是:



文章来源: IronPython in Unity3D