翻译 - Unity3D 中的 IronPython

 我是黄小果1960 发布于 2022-11-04 23:52

我想用IronPython作为Unity的外部语言脚本。IronPython执行加载所需的DLL放在Assets\Plugins。然而,当我运行脚本的时候出现了如下错误:

PythonImportErrorException: No module named UnityEngine
IronPython.Modules.Builtin.__import__ (IronPython.Runtime.Calls.ICallerContext,string,object,object,object) 
(wrapper dynamic-method) object.__import__##5 (IronPython.Runtime.Calls.ICallerContext,object,object,object,object) 
IronPython.Runtime.Calls.FastCallableWithContextAny.Call (IronPython.Runtime.Calls.ICallerContext,object,object,object,object) 
IronPython.Runtime.Calls.BuiltinFunction.Call (IronPython.Runtime.Calls.ICallerContext,object,object,object,object) 
IronPython.Runtime.Operations.Ops.CallWithContext (IronPython.Runtime.Calls.ICallerContext,object,object,object,object,object) 
IronPython.Runtime.Importer.Import (IronPython.Runtime.PythonModule,string,IronPython.Runtime.List) 
IronPython.Runtime.Operations.Ops.Import (IronPython.Runtime.PythonModule,string) 
(wrapper dynamic-method) object.##1 (IronPython.Runtime.ModuleScope) 

脚本和UnityEngine.dll是在同一个文件夹里的。这个是脚本。

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

import UnityEngine
from UnityEngine import *

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

原问题:IronPython in Unity3D

1 个回答
  • 来自@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

    我现在用的版本是:

    2022-11-12 01:45 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有