mono - Unity3D 中的 IronPython

标签 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,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!")

最佳答案

所以从 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

我使用的版本是:

enter image description here

关于mono - Unity3D 中的 IronPython,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11766181/

相关文章:

c# - ".NETFramework,Version=v4.0,Profile=Mono"问题 vb.net,c#

c# - 从服务器 xamarin.android 收到的证书无效

android - Xamarin Studio Android - 无法使用最新最好的平台创建 HelloWorld

visual-studio-2008 - 如何使用xbuild(来自Mono)构建Visual Studio解决方案?

Android - 在 Activity 中嵌入 Unity3d 场景 - 需要注销接收器吗?

wpf - 向提示 "Window is not supported in a WPF project"添加新的IronPython WPF窗口

c# - 将 c# 类型注入(inject) Ironpython

.net - 如何在 .NET 应用程序中嵌入 IronPython

ios - 如何在 Unity 中使用 iOS 框架?

c# - 在 Chrome 中打开 Unity Scripting API Reference,而不是在 Visual Studio 浏览器中构建。