2012-08-01 10 views
20

IronPythonをUnity3Dの外部スクリプト言語として使用しようとしています。 IronPythonの実行に必要なDLLは、Assets \ Pluginsの内部で正しくロードされます。Unity3DのIronPython

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

:なぜIronPythonの? –

+0

Mono.NETの上に構築されたUnity3Dを使って作業することができます。 –

+1

Unity3dはBooをそのままの状態でサポートしています。これはPythonにかなり近いものです。なぜIronPythonをそこに詰め込んでいるのだろうと思っています。 –

答えて

17

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

私は、ランタイムのバージョンがsであったので、私は前にエラーになった理由があったことに注意してください3.5以下の代わりに4.0と指定されています。

編集#2

あなたはIronPythonのからスクリプトにアクセスする必要がある場合は、あなたが行うことによって同様にあなたのアセンブリをロードすることができます。

engine.LoadAssembly(Assembly.GetAssembly(typeof(MyPlayerScriptOrSomething))); 

を次にスクリプトでそれを使用する:

import MyPlayerScriptOrSomething 

すべてのスクリプトに対してLoadAssemblyを実行する必要はなく、アセンブリを取得するために1回だけ実行することに注意してください。

編集#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

私が使用しているバージョンは次のとおりです。興味のうち

enter image description here

+0

開発モードでUnityを使用している間にPythonスクリプトを実行できました実行可能ファイル)。私はIronPython.dll(私はLibrary/ScriptAssembliesを前提としています)とPythonファイルをどこに置くべきかを理解しようとしています。どんなヒントも素晴らしいだろう。 – desimusxvii

+0

@desimusxvii元の投稿を更新して、あなたの質問に対する回答を反映させました。 –

+0

@StormKiernan Python 2.6 for .NET 2.0を使用しましたか?私はこれを再現しようとしていますが、大したことはありません:) – RadiantHex