ユニティでPythonメソッドを呼び出す方法
UnityでPythonメソッドを呼び出すには、次の手順を実行します。
- UnityでPythonとやり取りするためのC#スクリプトを作成する
- C#スクリプトでは、System.Diagnostics.Processクラスを使用してPythonプロセスを起動し、Unityと通信させます。
- Pythonスクリプトで、呼び出すメソッドを記述します。
- C# スクリプトでは、Process.StandardInput.WriteLine() メソッドを使用して Python プロセスにコマンドを送信し、Process.StandardOutput.ReadLine() メソッドを使用して Python プロセスから返される結果を読み取ります。
簡単なコード例を以下に示します。
UnityのC#スクリプト(PythonCaller.cs):
using UnityEngine;
using System.Diagnostics;
public class PythonCaller : MonoBehaviour
{
private Process pythonProcess;
void Start()
{
pythonProcess = new Process();
pythonProcess.StartInfo.FileName = "python";
pythonProcess.StartInfo.RedirectStandardOutput = true;
pythonProcess.StartInfo.RedirectStandardInput = true;
pythonProcess.StartInfo.UseShellExecute = false;
pythonProcess.StartInfo.CreateNoWindow = true;
pythonProcess.OutputDataReceived += new DataReceivedEventHandler(PythonProcess_OutputDataReceived);
pythonProcess.Start();
// 向Python进程发送命令
pythonProcess.StandardInput.WriteLine("from your_python_script import your_method");
pythonProcess.StandardInput.WriteLine("result = your_method()");
pythonProcess.StandardInput.WriteLine("print(result)");
pythonProcess.StandardInput.WriteLine("exit()");
pythonProcess.BeginOutputReadLine();
}
private void PythonProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
// 处理Python进程返回的结果
if (!string.IsNullOrEmpty(e.Data))
{
Debug.Log("Python Output: " + e.Data);
}
}
void OnApplicationQuit()
{
// 关闭Python进程
pythonProcess.Close();
pythonProcess.Dispose();
}
}
Pythonスクリプト(your_python_script.py)で:
def your_method():
return "Hello from Python!"
スクリプトのパスとメソッド名は、あなた独自ののものに変更する必要があることに注意してください。
これは単なる簡単な例で、より複雑なPythonとUnityの連携にはIronPythonやPythonのSocketモジュールなどの、別のライブラリや技術が必要になる場合があります。