C#からPythonを実行する方法【Unity】
UnityとPythonをつなげてやりたいことがあります。
Pythonで機械学習して、Unityで作ったゲームの中で使う、そんな感じのことがしたいのです。
なのでまずはPythonをどうやって実行するか、というところが課題でした。
調べてみると案外あっさり見つかったので、手順とポイントをまとめていきます!
参考にしたサイトはページ下部にリンクを張るので、そちらを見てください!
Unity(C#)側
using System.Diagnostics; using System.IO; using UnityEngine; public class CsPy : MonoBehaviour { //pythonがある場所 private string pyExePath = @"(Pythonの実行ファイルが置いてある場所)\python.exe"; //実行したいスクリプトがある場所 private string pyCodePath = @"(実行したいスクリプトの場所)\tst.py"; private void Start () { //外部プロセスの設定 ProcessStartInfo processStartInfo = new ProcessStartInfo() { FileName = pyExePath, //実行するファイル(python) UseShellExecute = false,//シェルを使うかどうか CreateNoWindow = true, //ウィンドウを開くかどうか RedirectStandardOutput = true, //テキスト出力をStandardOutputストリームに書き込むかどうか Arguments = pyCodePath + " " + "Hello,python.", //実行するスクリプト 引数(複数可) }; //外部プロセスの開始 Process process = Process.Start(processStartInfo); //ストリームから出力を得る StreamReader streamReader = process.StandardOutput; string str = streamReader.ReadLine(); //外部プロセスの終了 process.WaitForExit(); process.Close(); //実行 print(str); } }
python.exeの場所と、実際に実行したいpythonスクリプトの場所のフルパスをコード内に書きます。
Processクラスを使用して外部のファイルを実行します。
今回は、実行したpythonスクリプトから得たストリームを文字列にしてunity側で使います。
Python側
import sys #引数を得るために使用 playerSelect=str(sys.argv[1]) print( "REPLY[" + playerSelect + "]:" + "Hello,CS." )
sysライブラリを使用して、c#側から送った引数を使用します。
printした文字列が、c#側のストリームに送られます。
実行すると
うまくやり取りできました!