首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity3D中的IronPython

Unity3D中的IronPython
EN

Stack Overflow用户
提问于 2012-08-02 03:28:47
回答 1查看 11.8K关注 0票数 24

我正在尝试使用IronPython作为Unity3D的外部脚本语言。IronPython执行所需的DLL在Assets\Plugins中加载得很好。然而,当我尝试运行脚本时,我得到了这个错误:

代码语言:javascript
复制
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”位于同一文件夹中。脚本是这样的:

代码语言:javascript
复制
import clr
clr.LoadAssemblyFromFile("UnityEngine.dll")

import UnityEngine
from UnityEngine import *

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-02 04:25:13

因此,在Unity脚本中:

代码语言:javascript
复制
PythonEngine engine = new PythonEngine();
engine.LoadAssembly(Assembly.GetAssembly(typeof(GameObject)));
engine.ExecuteFile("apple.py");

在python脚本(我的是与game.exe位于同一文件夹中的apple.py )中:

代码语言:javascript
复制
import UnityEngine
from UnityEngine import *

Debug.Log("Hello From IronPython!")

编辑#1

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

编辑#2

如果您需要从IronPython访问脚本,则还可以通过执行以下操作来加载您的程序集:

代码语言:javascript
复制
engine.LoadAssembly(Assembly.GetAssembly(typeof(MyPlayerScriptOrSomething)));

然后在脚本中使用它:

代码语言:javascript
复制
import MyPlayerScriptOrSomething

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

编辑#3

IronPython DLL应该放在"Assets“下的某个"Plugins”文件夹中(最简单的是: Assets->Plugins。下面是我的设置:

代码语言:javascript
复制
> Assets
> > Plugins
> > > IronMath.dll
> > > IronPython.dll
> > > Microsoft.Scripting.dll
> > > Microsoft.Scripting.Core.dll

编辑#4

你的脚本可以放在你的程序有权访问的任何地方。例如,如果您想将"apple.py“直接放在"C:\”下,您可以通过执行以下操作来执行该文件:

代码语言:javascript
复制
engine.ExecuteFile(@"c:\apple.py");

编辑#5

我使用的版本是:

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11766181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档