|
之前我们尝试过在unity中调用python代码训练好的模型进行了交通信号灯的识别,但是我们调用的是不含参数的python代码,当然你用可以在那个交通信号灯识别的项目中改成含参数的python代码,就是把需要传入的图片路径设为一个参数,然后通过本节的方法在unity中调用并传入参数,那么方法是什么呢?其实很简单,我们只需要在写python脚本的路径时,把需要的参数加到路径后面就行了。
下面来实现一下,我们在python中写一个两数相加的函数,这两个数就是我们需要传入的参数。代码如下:
import sys
def a_plus_b(a,b):
a = int(a)
b = int(b)
return a+b
print(a_plus_b(sys.argv[1],sys.argv[2]))与平时唯一不一样的就是在最后输出的时候我们用sys.argv[1]...的形式表示需要传递进去的第一个参数。
然后在unity中我们新建一个名为Call_python.cs的脚本,我们写一个静态方法,用来调用python代码,
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//注意 一定要引用下面这个命名空间
using System.Diagnostics;
public class Call_python : MonoBehaviour
{
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
string[] arr = new string[2];
arr[0] = "10";
arr[1] = "20";
RunPythonScript(arr);
}
}
private static void RunPythonScript(string[] argvs)
{
Process p = new Process();
string path = @"E:\PythonProject\Demo_3\unity.py";
foreach (string temp in argvs)
{
path += " " + temp;
}
p.StartInfo.FileName = @"D:\APP\Anaconda3\envs\TensorFlow-GPU_2_3\python.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.Arguments = path;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.edirectStandardInput = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.BeginOutputReadLine();
p.OutputDataReceived += new DataReceivedEventHandler(Get_data);
p.WaitForExit();
}
private static void Get_data(object sender,DataReceivedEventArgs eventArgs)
{
if (!string.IsNullOrEmpty(eventArgs.Data))
{
print(eventArgs.Data);
}
}
}
当我们按下空格键时,程序调用RunPythonScript方法,接着就会在unity的控制台输出经过调用python代码输出的结果。
同样,如果我们在unity中改变变量值,也会输出相应的结果。
假如是在unity中调用没有参数的python代码时,我们就不需要在path后面加变量了。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|