mono - script - IronPython en Unity3D
unity static inspector (1)
Entonces, desde una secuencia de comandos de Unity:
PythonEngine engine = new PythonEngine();
engine.LoadAssembly(Assembly.GetAssembly(typeof(GameObject)));
engine.ExecuteFile("apple.py");
Y dentro de un script de python (el mío era apple.py ubicado en la misma carpeta que game.exe):
import UnityEngine
from UnityEngine import *
Debug.Log("Hello From IronPython!")
Editar # 1
Debo señalar que la razón por la que recibí un error antes era porque la versión de tiempo de ejecución se especificaba como 4.0 en lugar de 3.5 o menos.
Editar # 2
Si necesita acceder a sus scripts desde IronPython, puede cargar su ensamblaje también haciendo:
engine.LoadAssembly(Assembly.GetAssembly(typeof(MyPlayerScriptOrSomething)));
Luego para usarlo en script:
import MyPlayerScriptOrSomething
Tenga en cuenta que no tiene que hacer LoadAssembly para cada script, solo una vez para obtener el ensamblado.
Editar # 3
Las DLL de IronPython deben colocarse en una carpeta de "Complementos" en algún lugar debajo de "Activos" (más simplemente: Activos-> Complementos. Aquí está mi configuración:
> Assets
> > Plugins
> > > IronMath.dll
> > > IronPython.dll
> > > Microsoft.Scripting.dll
> > > Microsoft.Scripting.Core.dll
Editar # 4
Sus scripts pueden colocarse donde su programa tenga acceso. Por ejemplo, si quiere colocar "apple.py" directamente debajo de "C: /", puede ejecutar ese archivo haciendo:
engine.ExecuteFile(@"c:/apple.py");
Editar # 5
La versión que estoy usando es:
Estoy tratando de usar IronPython como un lenguaje de scripting externo para Unity3D. Los DLL necesarios para la ejecución de IronPython se cargan bien dentro de Assets / Plugins. Sin embargo, cuando intento ejecutar el script obtengo este error:
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>
La secuencia de comandos y el ''UnityEngine.dll'' se encuentran en la misma carpeta. Este es el guion:
import clr
clr.LoadAssemblyFromFile("UnityEngine.dll")
import UnityEngine
from UnityEngine import *
Debug.Log("Hello World from Python!")