unity鎬庝箞璋冪敤python鏂规硶
瑕佸湪Unity涓皟鐢≒ython鏂规硶锛屼綘鍙互浣跨敤浠ヤ笅姝ラ锛?/p>
-
鍦║nity涓垱寤轰竴涓狢#鑴氭湰锛岀敤浜庝笌Python杩涜浜や簰銆?/p>
-
鍦–#鑴氭湰涓紝浣跨敤
System.Diagnostics.Process
绫绘潵鍚姩涓€涓狿ython杩涚▼锛屽苟灏嗗叾涓嶶nity杩涜閫氫俊銆?/p> -
鍦≒ython鑴氭湰涓紝缂栧啓浣犳兂瑕佽皟鐢ㄧ殑鏂规硶銆?/p>
-
鍦–#鑴氭湰涓紝浣跨敤
Process.StandardInput.WriteLine()
鏂规硶鍚慞ython杩涚▼鍙戦€佸懡浠わ紝骞朵娇鐢?code>Process.StandardOutput.ReadLine()鏂规硶璇诲彇Python杩涚▼杩斿洖鐨勭粨鏋溿€?/p>
浠ヤ笅鏄竴涓畝鍗曠殑绀轰緥浠g爜锛?/p>
鍦║nity涓殑C#鑴氭湰锛圥ythonCaller.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();
// 鍚慞ython杩涚▼鍙戦€佸懡浠?/span>
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杩涚▼杩斿洖鐨勭粨鏋?/span>
if (!string.IsNullOrEmpty(e.Data))
{
Debug.Log("Python Output: " + e.Data);
}
}
void OnApplicationQuit()
{
// 鍏抽棴Python杩涚▼
pythonProcess.Close();
pythonProcess.Dispose();
}
}
鍦≒ython鑴氭湰涓紙your_python_script.py锛夛細
def your_method():
return "Hello from Python!"
璇锋敞鎰忥紝浣犻渶瑕佸皢鑴氭湰鐨勮矾寰勫拰鏂规硶鍚嶆洿鏀逛负浣犺嚜宸辩殑銆?/p>
杩欏彧鏄竴涓畝鍗曠殑绀轰緥锛屾洿澶嶆潅鐨凱ython鍜孶nity浜や簰鍙兘闇€瑕佷娇鐢ㄥ叾浠栧簱鎴栨妧鏈紝渚嬪IronPython鎴朠ython鐨凷ocket妯″潡銆?/p>