Min*_*wth 23 mono ironpython unity-game-engine
我正在尝试使用IronPython作为Unity3D的外部脚本语言.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>
Run Code Online (Sandbox Code Playgroud)
脚本和'UnityEngine.dll'位于同一文件夹中.这是脚本:
import clr
clr.LoadAssemblyFromFile("UnityEngine.dll")
import UnityEngine
from UnityEngine import *
Debug.Log("Hello World from Python!")
Run Code Online (Sandbox Code Playgroud)
Min*_*wth 19
所以从Unity脚本:
PythonEngine engine = new PythonEngine();
engine.LoadAssembly(Assembly.GetAssembly(typeof(GameObject)));
engine.ExecuteFile("apple.py");
Run Code Online (Sandbox Code Playgroud)
在python脚本里面(我的apple.py位于和game.exe相同的文件夹中):
import UnityEngine
from UnityEngine import *
Debug.Log("Hello From IronPython!")
Run Code Online (Sandbox Code Playgroud)
我应该注意之前我收到错误的原因是因为运行时版本被指定为4.0而不是3.5或更低.
如果您需要从IronPython访问脚本,那么您也可以通过执行以下操作来加载程序集:
engine.LoadAssembly(Assembly.GetAssembly(typeof(MyPlayerScriptOrSomething)));
Run Code Online (Sandbox Code Playgroud)
然后在脚本中使用它:
import MyPlayerScriptOrSomething
Run Code Online (Sandbox Code Playgroud)
请注意,您不必为每个脚本执行LoadAssembly,只需执行一次以获取程序集.
IronPython DLL应放在"Assets"下的某个"Plugins"文件夹中(最简单:Assets-> Plugins.这是我的设置:
> Assets
> > Plugins
> > > IronMath.dll
> > > IronPython.dll
> > > Microsoft.Scripting.dll
> > > Microsoft.Scripting.Core.dll
Run Code Online (Sandbox Code Playgroud)
您的脚本可以放在程序可以访问它们的任何位置.例如,如果要将"apple.py"直接放在"C:\"下,可以通过执行以下操作来执行该文件:
engine.ExecuteFile(@"c:\apple.py");
Run Code Online (Sandbox Code Playgroud)
我使用的版本是:
