24

Unity3D の外部スクリプト言語として IronPython を使用しようとしています。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スクリプトの内部(私のものはgame.exeと同じフォルダにあるapple.pyでした):

import UnityEngine
from UnityEngine import *

Debug.Log("Hello From IronPython!")

編集#1

以前にエラーが発生した理由は、ランタイム バージョンが 3.5 以下ではなく 4.0 として指定されていたためであることに注意してください。

編集#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 に答える