Unity3D啟動(dòng)外部程序并傳遞參數(shù)的實(shí)現(xiàn)
之前開(kāi)發(fā)項(xiàng)目,一直都使用的是外殼程序加子程序的模式,通過(guò)外殼程序去啟動(dòng)子程序,外殼程序和子程序之間的通信,是使用配置文件完成的。
我總覺(jué)得這樣通信很麻煩,因?yàn)橥鈿こ绦蛐枰獙?duì)配置文件進(jìn)行更改和寫(xiě)入,然后子程序又要讀取信息。而且整合的時(shí)候,會(huì)導(dǎo)致有很多配置文件,而且需要對(duì)路徑做很多處理和限制。
我發(fā)現(xiàn)Process.Start()函數(shù)中,是可以傳遞參數(shù)的。
也就是說(shuō),我們是可以在使用Process.Start()函數(shù)啟動(dòng)外部程序時(shí),傳遞參數(shù)的進(jìn)行通信的。
具體操作如下:
public void StartEXE() { ProcessStartInfo processStartInfo = new ProcessStartInfo(); processStartInfo.FileName = "C:/Users/Administrator/Desktop/Test/Demo.exe"; processStartInfo.Arguments = "啟動(dòng) 程序 1 2 3"; Process.Start(processStartInfo); }
需要注意的是,如果存在多個(gè)參數(shù)的話,參數(shù)之間需要使用空格進(jìn)行分隔。
外殼程序已經(jīng)傳遞了參數(shù),那么子程序如何接受參數(shù)呢?具體操作如下:
private void Start() { string[] args = Environment.GetCommandLineArgs(); text.text = args.Length.ToString(); for (int i = 0; i < args.Length; i++) { text.text += "\n" + "Arg" + i + ": " + args[i]; } }
我將所有的參數(shù)信息,打印在了一個(gè)Text上面。運(yùn)行效果圖如下:
補(bǔ)充:Unity3D:?jiǎn)?dòng)外部exe傳參以及設(shè)置窗口位置和大小
好久沒(méi)有更新博客了,最近項(xiàng)目上沒(méi)有太大的突破,也沒(méi)有涉及到新東西,所以想寫(xiě)博客,但是無(wú)奈沒(méi)有新東西,好在最近有點(diǎn)新的功能要做,之前也做過(guò),但是并沒(méi)有整理成博客,現(xiàn)在就記錄一下。省的還要去百度找。(最近好像新的Unity版本不能破解了,官網(wǎng)有時(shí)候也上不去,不知道Unity要搞什么東東。)
今天要說(shuō)的是Unity啟動(dòng)外部exe,并且傳遞參數(shù),改變外部exe窗口位置以及窗口大小。啟動(dòng)exe這個(gè)百度搜一大堆,主要是怎么設(shè)置窗口位置及大小。窗口大小的方法Unity有自己的方法,但是位置就沒(méi)法設(shè)置了,我今天用的方法是Windows原生的方法。需要引用user32.dll。
廢話不多說(shuō)了,下面上代碼
using UnityEngine; using System.Runtime.InteropServices; using System; using System.Diagnostics; public class ProperWindows : MonoBehaviour { [DllImport("user32.dll")] static extern IntPtr SetWindowLong(IntPtr hWnd, int _nIndex, int dwNewLong); [DllImport("user32.dll")] static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); [DllImport("user32.dll")] static extern IntPtr GetForegroundWindow(); //獲取最前端窗體句柄 [DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); //[DllImport("user32.dll")] //static extern IntPtr GetWindowThreadProcessld(); private void Awake() { //啟動(dòng)時(shí)傳過(guò)來(lái)的string數(shù)組,下標(biāo)為0的是啟動(dòng)的外部exe程序的完整路徑,下標(biāo)為1及之后的參數(shù)是想要傳過(guò)來(lái)的參數(shù)。 string[] args = Environment.GetCommandLineArgs(); var winInfo = JsonUtility.FromJson<WinInfo>(args[1]); // 設(shè)置屏大小和顯示位置 SetWindowPos(GetForegroundWindow(), 0, winInfo.x, winInfo.y, winInfo.width, winInfo.height, 0x0040); } // Use this for initialization void Start() { //啟動(dòng)外部exe程序,第一個(gè)參數(shù)為exe完整路徑,第二個(gè)參數(shù)為要傳入的參數(shù)。 string winInfo = JsonUtility.ToJson(new WinInfo(0, 0, 1000, 500)); Process.Start(@"C:\Users\wangbo\Desktop\2\2.exe", winInfo); } // Update is called once per frame void Update() { } } [Serializable] public class WinInfo { public int x; public int y; public int width; public int height; public WinInfo(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } }
上面的代碼里我傳的參數(shù)是json格式的,在Start里啟動(dòng)一個(gè)exe,在Awake里接收參數(shù),設(shè)置窗口位置以及大小。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
- Unity3D運(yùn)行報(bào)DllNotFoundException錯(cuò)誤的解決方案
- unity avprovideo插件的使用詳解
- unity里獲取text中文字寬度并截?cái)嗍÷缘牟僮?/a>
- unity 如何獲取button文本的內(nèi)容
- unity 如何獲取Text組件里text內(nèi)容的長(zhǎng)度
- unity 如何使用文件流讀取streamingassets下的資源
- unity 文件流讀取圖片與www讀取圖片的區(qū)別介紹
- Unity之繞軸進(jìn)行旋轉(zhuǎn)的操作
- 解決unity rotate旋轉(zhuǎn)物體 限制物體旋轉(zhuǎn)角度的大坑
- 詳解Unity安卓共享紋理
相關(guān)文章
C#如何利用結(jié)構(gòu)體對(duì)固定格式數(shù)據(jù)進(jìn)行解析
這篇文章主要為大家詳細(xì)介紹了C#利用結(jié)構(gòu)體對(duì)固定格式數(shù)據(jù)進(jìn)行解析,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01C#利用WinForm實(shí)現(xiàn)查看指定目錄下所有圖片功能
Windows 窗體是用于生成 Windows 桌面應(yīng)用的 UI 框架, 它提供了一種基于 Visual Studio 中提供的可視化設(shè)計(jì)器創(chuàng)建桌面應(yīng)用的高效方法,本文介紹了C#利用WinForm實(shí)現(xiàn)可以查看指定目錄文件下所有圖片功能,需要的朋友可以參考下2024-05-05用C#+Selenium+ChromeDriver爬取網(wǎng)頁(yè)(模擬真實(shí)的用戶瀏覽行為)
這篇文章主要介紹了用C#+Selenium+ChromeDriver爬取網(wǎng)頁(yè),模擬真實(shí)的用戶瀏覽行為,需要的小伙伴可以參考一下2022-01-01C# Distinct和重寫(xiě)IEqualityComparer時(shí)要知道的二三事
這篇文章主要給大家介紹了關(guān)于C# Distinct和重寫(xiě)IEqualityComparer時(shí)要知道的二三事,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06C++聯(lián)合體轉(zhuǎn)換成C#結(jié)構(gòu)的實(shí)現(xiàn)方法
這篇文章主要介紹了C++聯(lián)合體轉(zhuǎn)換成C#結(jié)構(gòu)的實(shí)現(xiàn)方法,需要的朋友可以參考下2014-08-08