作者:多米音乐_34396075 | 来源:互联网 | 2023-08-29 05:42
基本原理:命令行启动Unity,然后执行对应的类中的静态方法。unity命令行参数简介:https:my.oschina.netmbreathblog759480Unity工程目录
基本原理:命令行启动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代码中的方法被正确执行了。