标题## Unity C#与Python互相调用
参考了一堆,没有一个完整的。已经在Unity中实现了互相调用与第三方库的使用,图的就是在Unity中使用各种Python的插件包。Unity的官方插件也试过,不过应该只能是编辑器使用,不能发布独立应用。
这里使用的方案是Python.Net, 官网下载源码编译一下RunTime,接下来准备Python解释器,为了不踩坑下载了别人博文中的python3.10版本的Windows embeddable package压缩包, 下载后扔在了StreamingAssets目录下。
在Assets目录下创建一个存放py脚本的文件夹,同时我把第三方库也放在了这里。这样环境就准备好了。
新建Cs脚本贴代码
using Python.Runtime;
using System.IO;
public class PythonManager
{
static string pyCodePath = "";
static string packagePath = "";
public static void InitEvn()
{
// 解释器路径
Runtime.PythonDLL = Path.Combine(Application.streamingAssetsPath, "PythonEnv\\python310.dll");
// 脚本路径
pyCodePath = Path.Combine(Application.dataPath, "Python/Code");
// 库路径
packagePath = Path.Combine(Application.dataPath, "Python/site-packages");
// 启动环境
PythonEngine.Initialize(true, true, ShutdownMode.Soft);
using (Py.GIL())
{
dynamic sys = Py.Import("sys");
// 添加路径
sys.path.append(pyCodePath);
sys.path.append(packagePath);
// 导入模块调用
dynamic main = Py.Import("Aligo");
dynamic res = main.check();
Debug.LogError(res);
}
PythonEngine.Shutdown();
}
public static void Run()
{
}
}
在python那边贴上
import sys
import UnityEngine as ue
import requests
def check():
ue.Debug.Log('调用Unity系统函数')
name = '返回Unity的变量'
return name
启动Unity运行即可。
包已经上传,免费下载,不是啥核心东西