zoukankan      html  css  js  c++  java
  • Python调用Unity工程下CSharp代码中的静态方法

    基本原理:命令行启动Unity,然后执行对应的类中的静态方法。

    unity命令行参数简介:https://my.oschina.net/mbreath/blog/759480

    Unity工程目录:

    D:_lugsProjectsXLuaxlua

    Unity安装目录:

    D:1_WorkSoftwareUnity2017.2.0p4UnityEditorUnity.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 }
  • 相关阅读:
    习惯的本质:逐步建立新的常态
    如何度过有用的每一天
    如何利用晚上八点到十点这段时间自我提升
    为什么很多年轻人总会感到迷茫
    当你学会专注,人生才算真正成熟
    如何过上简单的生活
    游标
    触发器

    函数
  • 原文地址:https://www.cnblogs.com/luguoshuai/p/14678314.html
Copyright © 2011-2022 走看看