首頁  >  問答  >  主體

翻译 - Unity3D 中的 IronPython

我想用IronPython作为Unity的外部语言脚本。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!")

原问题:IronPython in Unity3D

高洛峰高洛峰2717 天前456

全部回覆(1)我來回復

  • PHP中文网

    PHP中文网2017-04-17 11:59:30

    來自@Storm Kiernan 的回答:
    從Unity的腳本:

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

    python腳本裡的(我的pple.py和game.exe放在一個資料夾裡的):

    import UnityEngine
    from UnityEngine import *
    
    Debug.Log("Hello From IronPython!")
    
    Edit #1

    我要指出我出錯的原因是運行時版本指定為4.0,而不是3.5或更低。

    Edit #2

    如果你需要從IronPython 存取腳本,你也可以透過載入組件:

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

    然後用到腳本裡:

    import MyPlayerScriptOrSomething
    

    注意你不需要為每個腳本載入組件,只需一次取得程式集。

    Edit #3

    IronPython DLL應該放在Assets下的 Plugins資料夾,這是我的設定。

    > Assets
    > > Plugins
    > > > IronMath.dll
    > > > IronPython.dll
    > > > Microsoft.Scripting.dll
    > > > Microsoft.Scripting.Core.dll
    
    Edit #4

    腳本可以放在任何程式訪問的到的地方。例如,你要直接把apple.py"放在C:,你可以用以下方法來執行:

    engine.ExecuteFile(@"c:\apple.py");
    
    Edit #5

    我現在用的版本是:

    回覆
    0
  • 取消回覆