2012-08-01 18 views
20

IronPython'u Unity3D için bir harici komut dosyası dili olarak kullanmaya çalışıyorum. IronPython'un yürütme yükü için gereken DLL'ler, Assets \ Plugins öğesinin içine girer.Unity3D içinde 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> 

senaryo ve 'UnityEngine.dll' aynı klasörde bulunur: Senaryoyu çalıştırmayı denediğinizde Ancak, bu hatayı alabilirsiniz. Bir Birlik komut dosyasından Yani

import clr 
clr.LoadAssemblyFromFile("UnityEngine.dll") 

import UnityEngine 
from UnityEngine import * 

Debug.Log("Hello World from Python!") 
+0

ilgi Out: neden IronPython? –

+0

Mono.NET –

+1

üzerine kurulu Unity3D ile çalışmamı sağlar Unity3d, Python'a oldukça yakın olan kutunun dışına Boo öğesini destekler; IronPython'u neden özel olarak içtiğini merak ediyorum. –

cevap

17

:

PythonEngine engine = new PythonEngine(); 
engine.LoadAssembly(Assembly.GetAssembly(typeof(GameObject))); 
engine.ExecuteFile("apple.py"); 

Ve bir piton senaryonun içine (mayın apple.py Game.exe aynı klasörde bulunan): Bu komut dosyası olduğunu

import UnityEngine 
from UnityEngine import * 

Debug.Log("Hello From IronPython!") 

Düzenleme 1.

Ben çalışma zamanı sürümü ler çünkü daha önce bir hata başlamıştı sebebi olduğunu unutmamalıdır

3.5 veya daha düşük bir 4.0 yerine 4.0 olarak belirtildi.

Düzenleme #

IronPython adresinin komut erişmeniz gerekiyorsa, o zaman yaparak hem derleme yükleyebilirsiniz 2:

import MyPlayerScriptOrSomething 
:

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

komut kullanmak

Derlemeyi almak için her komut için LoadAssembly'ı bir kez yapmanız gerekmediğini unutmayın.

IronPython DLL yere "Varlıklar" başlığı altında bir "Eklentiler" klasörüne yerleştirilmelidir 3

(çoğu basitçe Düzenleme #:. Aktif-> Eklentiler İşte benim kurgusunda:

> Assets 
> > Plugins 
> > > IronMath.dll 
> > > IronPython.dll 
> > > Microsoft.Scripting.dll 
> > > Microsoft.Scripting.Core.dll 

Düzenleme 4.

sizin komut program onlara erişimi olan her yerde konabilir örneğin, "apple.py" doğrudan altında yer isteseydim. "C: \", aşağıdakileri yaparak bu dosyayı yürütebilir:

Ben kullanıyorum

Düzenleme 5.

sürümü:

enter image description here

+0

Geliştirme modunda Unity kullanırken (sen yapmadan önce python komut dosyaları çalıştırabilirsiniz? bir yürütülebilir). Ben sadece IronPython.dll (ben Kütüphane/ScriptAssemblies varsayalım) ve python dosyaları koymak için nereye koymak anlamaya çalışıyorum. Herhangi bir ipucu harika olurdu. – desimusxvii

+0

@desimusxvii Sorunuzun yanıtlarını yansıtmak için orijinal gönderiyi güncelledim. –

+0

@StormKiernan, .NET 2.0 için Python2.6 kullandı mı? Bunu çoğaltmaya çalışıyorum ama çok fazla şansım yok :) – RadiantHex