Unity | 调用外部exe

这篇具有很好参考价值的文章主要介绍了Unity | 调用外部exe。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、调用另一个Unity EXE软件

    /// <summary>
    /// 打开外部程序
    /// </summary>
    /// <param name="_exePathName">EXE所在绝对路径及名称,带后缀.exe</param>
    /// <param name="_exeArgus">启动参数</param>
    public static void StartEXE(string _exePathName, string _exeArgus)
    {
        try
        {
            System.Diagnostics.Process myprocess = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(@_exePathName, _exeArgus);
            myprocess.StartInfo = startInfo;
            myprocess.StartInfo.UseShellExecute = false;
            myprocess.Start();
        }
        catch (Exception ex)
        {
           Debug.Log("加载exe失败," + ex.Message);
        }
    }

二、调用控制台应用程序

加载控制台应用程序需要设置WorkingDirectory属性(猜测原因:我项目中加载的控制台应用程序启动时要调用别的dll,这个dll要加载本地模型文件,所以需要设置exe的当前工作目录),否则会加载失败。

    /// <summary>
    /// 打开外部程序
    /// </summary>
    /// <param name="_exePathName">EXE所在绝对路径,不带名称</param>
    /// <param name="_exeName">exe名称,带后缀</param>
    public static void StartEXE(string _exePathName,string _exeName)
    {
        try
        {
            System.Diagnostics.Process myprocess = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(@_exePathName+ "/"+_exeName);
            myprocess.StartInfo = startInfo;
            myprocess.StartInfo.WorkingDirectory = @_exePathName;
            myprocess.StartInfo.CreateNoWindow = true;
            myprocess.StartInfo.UseShellExecute = false;
            myprocess.StartInfo.RedirectStandardOutput = true;
            myprocess.Start();
        }
        catch (Exception ex)
        {
            Debug.Log("加载exe失败," + ex.Message);
        }
    }

三、关闭进程

    /// <summary>
    /// 杀死进程
    /// </summary>
    /// <param name="_exePathName">进程名称,不带路径及后缀</param>
    public static void CloseExe(string _exePathName)
    {
        System.Diagnostics.Process[] progress = System.Diagnostics.Process.GetProcessesByName(_exePathName);
        Debug.Log("progress个数:" + progress.Length);
        for (int i = 0; i < progress.Length; i++)
        {
            progress[i].Kill();
        }
    }

四、路径加载注意事项

如果第三方exe的路径是通过config.txt配置的,那么读取这个路径字符串时需要注意:

  1. 方式一

路径字符串单独一行。那么读取字符串时要注意其length比实际字符串多1位,所以要进行字符串处理。

  • 配置文件

C:\Users\fengchujun\Desktop\zhanhuiexe\pipiGame\PipiDriver.exe
  • 读取路径字符串

  IEnumerator GetConfigData()
    {
        using (UnityWebRequest w = UnityWebRequest.Get(Application.streamingAssetsPath + "/configV2.1.0.txt"))
        {
            yield return w.SendWebRequest();
            if (w.isNetworkError || w.isHttpError)
            {
                Debug.Log("GetConfig error");
            }
            else
            {
                string data = w.downloadHandler.text;
                string[] _array = data.Split('\n', System.StringSplitOptions.RemoveEmptyEntries);
              
                ExePath=_array[0];
            }
        }
    }
  • 字符串处理及调用

 if (ExePath != "")
 {
      string  path = @ExePath.Substring(0,ExePath.Length-1);
      Debug.Log(path.Length+":"+ path);
      StartEXE(path, null);
 }
  1. 方式二

路径按空格分割的方式和别的数据在一行,那么这个路径字符串不需要处理。

  • 配置文件

(注意exe后有空格)

1080 720 25 2 5 14 17 C:\Users\fengchujun\Desktop\zhanhuiexe\pipiGame\PipiDriver.exe 
  • 读取路径字符串

 IEnumerator GetConfig()
  {
        using (UnityWebRequest w = UnityWebRequest.Get(Application.streamingAssetsPath + "/config.txt"))
        {
            yield return w.SendWebRequest();
            if (w.isNetworkError || w.isHttpError)
            {
                Debug.Log("GetConfig error");
            }
            else
            {
                string info = w.downloadHandler.text;
                string[] _array = info.Split('\n', System.StringSplitOptions.RemoveEmptyEntries);
                Debug.Log(_array.Length);

                //get cameraInfo
                string[] cameraInfo = _array[0].Split(' ', System.StringSplitOptions.RemoveEmptyEntries);
                Debug.Log(cameraInfo.Length);
                //...
                softExePath= cameraInfo[7];
            }
       } 
}
  • 调用文章来源地址https://www.toymoban.com/news/detail-553264.html

    /// <summary>
    /// 开启第三方exe
    /// </summary>
    /// <returns></returns>
    void StartExe()
    {
        CommonData.WriteIntoTxt("第三方软件exe:" + softExePath);
        if (softExePath != "")
        {
            CommonData.StartEXE(softExePath, null);
        }
    }

到了这里,关于Unity | 调用外部exe的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity动态加载外部服务器上的FBX模型

    去年某项目需要从后端服务器上加载FBX模型,但是整个项目中只有很少的地方需要用到动态模型替换,并且项目交付后需要外行人员也能轻松上手更换需要动态加载的模型,所以需要实现一个简单的模型打包和动态模型加载功能。 1.创建一个新的脚本,编写如下代码 2.回到

    2024年02月11日
    浏览(45)
  • 【Unity3D】Unity 脚本 ② ( Visual Studio 2019 中的 Unity 编译环境配置 | Unity 编辑器关联外部 C# 脚本编辑器 Visual Studio )

    在上一篇博客 【Unity3D】Unity 脚本 ① ( 创建 C# 脚本 | Visual Studio 2019 中打开 C# 脚本 | 编译 C# 脚本 | 挂载 C# 脚本到游戏物体 | 运行脚本 ) 中 , 双击 Unity 编辑器中的 Project 窗口中的 C# 脚本 , 进入到 Visual Studio 中出现下图样式 , 这是因为没有配置 Unity 编译环境 ; 参考如下两个博

    2023年04月08日
    浏览(66)
  • Python调用外部程序的9种方式,你都知道吗?

    前言     外部程序,测试工程师经常使用adb,Python程序中调用adb,相对当前的Python程序,则为调用外部程序,你可能用过os.system()、os.popen()等方式,官方推荐subprocess模块中的run()函数,根据你的喜好,那种方式都可以使用,先罗列一点前置知识点,如果你还不知道这些术

    2023年04月25日
    浏览(44)
  • Unity | Shader基础知识(第十集:shader常用外部资产单词速成)

    目录 一、外部资产简介 二、常用的外部资产单词 三、常用的外部资产单词和引入内部 四、图片资产外部调整的具体讲解 1.Tiling,中文:铺地砖 2.Offset,中文:偏移 五、作者的话 一、外部资产简介 在第六集中,我们加入过外部颜色资源。 Unity | Shader基础知识(第六集:语法

    2024年04月13日
    浏览(47)
  • 在 Unity 解决方案中引用外部工程(.csproj)或 NuGet 包

    本人近期制作一服务端和客户端程序,采用下列架构实现: 服务端(Server.exe) 中间件(Shared.dll,实现两端共享的那部分代码) 客户端(Client.exe,用 Unity 实现) 在不使用 Unity 的情况下,一般把三个工程(.csproj)放入同一解决方案(.sln),然后在服务端和客户端添加对中

    2024年02月02日
    浏览(33)
  • Unity 读取外配-第三集-网络下载形式读取外部图片(简单但详细版)

    需求:我有一个文件夹,里面有好多好多图片,我想软件自己读出来 一、具体逻辑 1.写出你希望读取的文件夹的地址 2.读取这个文件夹里所有的文件名称 3.把这个文件夹里名称中和图片有关的文件名找出来 4.用代码在unity里创建一个图片 5.用加载的图片替换掉创建的这个图片

    2024年02月12日
    浏览(41)
  • unity教程||Unity调用安卓方法实现安装apk文件

    记录下,个人之前做一个项目的时候碰到一个需求,安卓端的app中需要做冷更新,这里简单解释下冷更新,其实就是拿当前的app的版本号比对服务器上的版本号,如果服务器上有新版本,就下载新版本的apk,然后安装替换掉整个app,就是冷更新。但是具体实现的时候碰到个问

    2024年02月07日
    浏览(44)
  • Unity调用Python

    1.python环境安装(自行解决) 2.Python代码编写(工具:notepad++、pycharm、文本) 3.unity代码 

    2024年02月12日
    浏览(25)
  • unity 调用高德SDK

    unity 2022.2.20f1c1 一、准备工作: 方式一:Unity打包arr   导入AndroidStudio ,AndroidStudio打包 方式二:Unity通过MainActivity.java调用SDK  ,MainActivity.java  放入到Android Studio中编写代码 二、打包环境:下载jdk11和ndk-r23b 三、交互部分 1、高德SDK下载:相关下载-Android 地图SDK|高德地图AP

    2024年01月20日
    浏览(29)
  • 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )

    Unity 中使用的 3D 模型格式为 FBX , 使用如下建模软件 可制作该类型模型 : 3Dmax Maya ZBrush Cinema4D Blender 建模完成后 , 将 3D 模型导出为 FBX ( .fbx ) 格式 即可在 Unity 中使用 ; 在 Project 文件窗口 中的 Asstes 目录 下 , 创建一个模型目录 Models , 将 模型文件直接从文件系统中拖到该目录中

    2023年04月15日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包