1. 程式人生 > 其它 >Unity中通過Process啟動程式並傳遞資料

Unity中通過Process啟動程式並傳遞資料

技術標籤:Unity功能指令碼unityunity3dc#

說明:


最近根據專案上的需求,一個專題中有眾多的場景,後決定採用【主場景+子場景】分開打包的方式,需要解決的是在主場景登陸進去之後需要將【使用者ID】等資料傳遞到子場景中,一開始採用的是Socket通訊的方式傳遞,後來改為使用程序(Process)啟動外部exe


所引用的名稱空間為:System.Diagnostics

1. 不帶引數直接啟動外部程式

 Process.Start("啟動的路徑名字");

2. 啟動時傳遞引數

傳遞多個引數時需要用【空格】分開

	 /// <param name="path">啟動路徑</param>
/// <param name="argument">傳遞的引數 【多個引數使用空格分開】</param> public static void OpenStartByProgress(string path,string argument) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = path; startInfo.Arguments = argument; Process.
Start(startInfo); }

3.啟動傳遞引數,避免多開(只開一個)

注意: 獲取程序中的名字進行比較時沒有後綴,比如QQ.exe, 程序名字是QQ

	 /// <param name="path">啟動路徑</param>
     /// <param name="argument">傳遞引數</param>
    public static void OpenByProgress(string path,string argument,UnityAction<string> action=
null) { //這裡是根據路徑獲取啟動的程式名字 int index = path.LastIndexOf('/'); //啟動程序的名字(程序的名字字尾沒有.exe) string ProgressName =path.Substring(index+1).Split('.')[0]; //索引記數 int currentProgress = 0; Process[] processes = Process.GetProcesses(); foreach (var item in processes) { if (item.ProcessName == ProgressName) { currentProgress++; } } if (currentProgress >= 1) //已經啟動的情況下 { //提示資訊: 當前程序已經啟動 請勿重複使用 action("當前程式已經啟動,請勿重複啟動"); } else //沒有啟動 { //程序啟動 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = path; startInfo.Arguments = argument; Process.Start(startInfo); } }

4.子場景啟動時獲取傳遞的引數

 private void GetArguements()
    {
    	//args陣列獲取的就是引數列表,可根據實際情況進行處理
        string[] args = Environment.GetCommandLineArgs();
        //args[0]: 的資料為啟動的路徑
        ProgressData.Id = args[1];
        ProgressData.MemberId = args[2];
        ProgressData.Token = args[3];
    }

如有錯誤請指出,相互學習,相互進步!