找回密码
 立即注册
查看: 551|回复: 0

[笔记] unity与python联动之------unity调用python中含参数的代码

[复制链接]
发表于 2021-3-12 12:46 | 显示全部楼层 |阅读模式
之前我们尝试过在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后面加变量了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-19 17:55 , Processed in 0.094390 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表