2012-08-01 20 views
20

में आयरनपीथन, मैं यूनिटी 3 डी के लिए बाहरी स्क्रिप्टिंग भाषा के रूप में आयरनपीथन का उपयोग करने की कोशिश कर रहा हूं। IronPython के निष्पादन लोड के लिए आवश्यक DLLs एसेट्स \ प्लगइन्स के अंदर बस ठीक है।यूनिटी 3 डी

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

यह मुझे यूनिटी 3 डी के साथ काम करने की अनुमति देता है जो मोनो.NET –

+1

के शीर्ष पर बनाया गया है Unity3d बॉक्स के बाहर बू को समर्थन देता है, जो कि पाइथन के बहुत करीब है; मैं सोच रहा हूं कि आप विशेष रूप से आयरनपीथन क्यों शादी कर रहे हैं। –

उत्तर

17
एक एकता स्क्रिप्ट से

तो:

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

और एक अजगर स्क्रिप्ट के अंदर (मेरा apple.py Game.exe को उसी फ़ोल्डर में स्थित था): यह स्क्रिप्ट है

import UnityEngine 
from UnityEngine import * 

Debug.Log("Hello From IronPython!") 

# संपादित करें 1

मैं नोट करना चाहिए कि कारण मैं पहले एक त्रुटि हो रही थी था क्योंकि क्रम संस्करण रों था एक 3.5 या उससे कम के बजाय 4.0 के रूप में pecified।

# संपादित 2

आप IronPython से अपनी स्क्रिप्ट का उपयोग करने की जरूरत है, तो आप ऐसा करने से और साथ ही अपने विधानसभा लोड कर सकते हैं:

import MyPlayerScriptOrSomething 
:

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

फिर स्क्रिप्ट में इसका उपयोग करना

ध्यान दें कि विधानसभा पाने के लिए आपको केवल प्रत्येक स्क्रिप्ट के लिए LoadAssembly नहीं करना है।

# संपादित 3

IronPython DLLs कहीं "संपत्ति" के अंतर्गत "प्लगइन्स" फ़ोल्डर में रखा जाना चाहिए (सबसे बस:। Assets-> प्लग-इन यहाँ मेरी सेटअप है:

> 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

क्या आप पाइथन स्क्रिप्ट चलाने में सक्षम थे, जबकि आप विकास मोड में एकता का उपयोग कर रहे थे (इससे पहले कि आप बनाया जाए एक निष्पादन योग्य)। मैं सिर्फ यह पता लगाने की कोशिश कर रहा हूं कि IronPython.dll को कहां रखा जाए (मैं लाइब्रेरी/स्क्रिप्ट एस्सेम्ब्लीज़ मान रहा हूं) और कहां मेरी पायथन फाइलें रखनी है। कोई संकेत महान होगा। – desimusxvii

+0

@desimusxvii मैंने आपके प्रश्न के उत्तर को दर्शाने के लिए मूल पोस्ट को अपडेट किया। –

+0

@StormKiernan क्या आपने .NET 2.0 के लिए Python2.6 का उपयोग किया था? मैं इसे पुन: पेश करने की कोशिश कर रहा हूं लेकिन बिना किस्मत के :) :) – RadiantHex