Python調用Unity工程下CSharp代碼中的靜態方法


基本原理:命令行啟動Unity,然后執行對應的類中的靜態方法。

unity命令行參數簡介:https://my.oschina.net/mbreath/blog/759480

Unity工程目錄:

D:\0_lugsProjects\XLua\xlua

Unity安裝目錄:

D:\1_WorkSoftware\Unity2017.2.0p4\Unity\Editor\Unity.exe

編寫CShrap代碼:

 1 using UnityEditor;
 2 using UnityEngine;
 3 
 4 public class EditorMenu
 5 {
 6     [MenuItem("Test/測試Python調用Unity方法")]
 7     public static void TestPythonUnity()
 8     {
 9         Debug.Log("測試Python調用Unity方法");
10     }
11 }

運行之后,將“測試Python調用Unity方法”這句話寫入log文件。

編寫Python腳本:

 1 import os
 2 import subprocess
 3 import psutil
 4 
 5 #判斷進程是否正在運行
 6 def Exist(process_name):
 7     pl = psutil.pids()
 8     for pid in pl:
 9         if psutil.Process(pid).name() == process_name:
10             return pid
11 
12 #殺掉運行中的Unity
13 def KillUnity():
14     if isinstance(Exist("Unity.exe"),int):
15         os.system("taskKill /F /IM Unity.exe")
16     else:
17         print('no such process...')
18 
19 def ExcuteUnityMethod():
20     unityPath = "D:\\1_WorkSoftware\\Unity2017.2.0p4\\Unity\\Editor\\Unity.exe"
21     logFilePath = "D:\\0_lugsProjects\\Python\\Log_PythonUnity.txt"
22     projectPath = "D:\\0_lugsProjects\\XLua\\xlua"
23     className = "EditorMenu"
24     methodName = "TestPythonUnity"
25     cmd = "%s -quit -batchmode -logFile %s -projectPath %s -executeMethod %s.%s" % (unityPath,logFilePath,projectPath,className,methodName)
26     #print(cmd)
27     subprocess.Popen(cmd)
28 
29 def Main():
30     KillUnity()
31     ExcuteUnityMethod()
32 
33 Main()
34 
35 input("Enter any key ...")

注意:psutil是一個模塊,需要單獨安裝。以下網址為其介紹。

https://www.liaoxuefeng.com/wiki/1016959663602400/1183565811281984

運行python腳本結果的部分截圖:

可以看到CSharp代碼中的方法被正確執行了。

如果想在CSharp方法中拿到python傳過去的參數該如何做呢?很簡單,CSharp提供了獲取命令行參數額接口,代碼如下:

 1 static void ParseCommandParams()
 2 {
 3     string[] array = System.Environment.GetCommandLineArgs();
 4     if (null != array)
 5     {
 6         for (int i = 0; i < array.Length; ++i)
 7         {
 8             DebugLog(array[i]);
 9         }
10     }
11 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM