[實用工具]Unity調用外部EXE或Shell命令

版權所有,轉載須註明出處!
喜歡火影、喜歡Java、喜歡unity3D、喜歡遊戲開發的都可以加入木葉村Q羣:379076227

1、開門見山的需求
有的時候,我們想把一些外部命令集成到unity中,比如,你想通過點擊Unity中的一個按鈕,就更新SVN(假設該項目是受SVN管理的)。
那麼,就涉及到一個Unity調用外部可執行文件、bat/shell等。
這個需求是挺常見的,也是不難實現的。

2、簡單明瞭的實現
我們先封裝一個命令調用的函數:
[C#] 純文本查看 複製代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private static void processCommand(string command, string argument){
        ProcessStartInfo start = new ProcessStartInfo(command);
        start.Arguments = argument;
        start.CreateNoWindow = false;
        start.ErrorDialog = true;
        start.UseShellExecute = true;
 
        if(start.UseShellExecute){
                start.RedirectStandardOutput = false;
                start.RedirectStandardError = false;
                start.RedirectStandardInput = false;
        } else{
                start.RedirectStandardOutput = true;
                start.RedirectStandardError = true;
                start.RedirectStandardInput = true;
                start.StandardOutputEncoding = System.Text.UTF8Encoding.UTF8;
                start.StandardErrorEncoding = System.Text.UTF8Encoding.UTF8;
        }
 
        Process p = Process.Start(start);
 
        if(!start.UseShellExecute){
                printOutPut(p.StandardOutput);
                printOutPut(p.StandardError);
        }
 
        p.WaitForExit();
        p.Close();
}


好了,關於上述代碼相關的,如果大家有興趣可以自行去msdn查API。
不關心的,繼續往下看怎麼使用。

3、細緻耐心的命令行教學
上面封裝的函數,第一個參數即命令名,第二個參數爲這個命令接受的參數。
對於沒有接觸命令行的同學。可以現在跟我做一遍感受下命令行。如果對命令行比較熟悉的同學,可以直接跳到第4步。
以下操作在WIN7中。
A:按下win+R,在出現的運行窗口輸入“cmd”,然後回車。
B:這時候會出現一個命令行窗口。
C:輸入命令:notepad,然後回車
 
D:會發現打開了記事本。
 

E:假設你D盤有個文件1.txt
F:那麼你可以在命令行輸入:notepad D:\1.txt 來直接使用記事本打開D盤的1.txt。
 

簡單來說,上面的notepad就是我們要傳入的封裝好的函數的第一個參數。而D:\1.txt就是我們的第二個參數。


那麼可執行的命令有哪些呢?
在系統變量PATH中所有路徑下的exe、bat/bash(linux) 文件都可以執行。
你可以通過在命令行中輸入:echo %PATH%  來獲得PATH的信息。
 

也可以在“桌面”--“計算機”--“右鍵”--“屬性”--“高級系統設置”,在“環境變量”中查看PATH
 

 

雙擊這個path可以查看和編輯。


如果沒有在path中的路徑。你想調用路徑下的exe只能用全路徑了。比如你想調用  D:\AA\BB\CC\d.exe 這個exe。PATH中沒有D:\AA\BB\CC的話。那麼,你在命令行每次都要輸入 D:\AA\BB\CC\d.exe來調用他。如果PATH中有D:\AA\BB\CC。那麼你在命令行可以直接輸入d.exe來調用他。
好了。關於命令行的就講這麼多啦~~進入第4步。


4、兇殘粗暴地調用第二步定義的函數
比如我們現在想更新SVN,只要在Unity中找個地方(比如你寫個)執行下面的代碼:
[C#] 純文本查看 複製代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class SvnForUnity{
 
        static string SVN_BASE = "F:\\Project\\Game";
 
 
        [MenuItem("SVN/Update", false, 1)]
        public static void SvnUpdate(){
                processCommand("svn", "update \""+SVN_BASE+"\"");
        }
 
 
        private static void processCommand(string command, string argument){
                ProcessStartInfo start = new ProcessStartInfo(command);
                start.Arguments = argument;
                start.CreateNoWindow = false;
                start.ErrorDialog = true;
                start.UseShellExecute = true;
 
                if(start.UseShellExecute){
                        start.RedirectStandardOutput = false;
                        start.RedirectStandardError = false;
                        start.RedirectStandardInput = false;
                } else{
                        start.RedirectStandardOutput = true;
                        start.RedirectStandardError = true;
                        start.RedirectStandardInput = true;
                        start.StandardOutputEncoding = System.Text.UTF8Encoding.UTF8;
                        start.StandardErrorEncoding = System.Text.UTF8Encoding.UTF8;
                }
 
                Process p = Process.Start(start);
 
                if(!start.UseShellExecute){
                        printOutPut(p.StandardOutput);
                        printOutPut(p.StandardError);
                }
 
                p.WaitForExit();
                p.Close();
        }
 
}


然後就發現Unity中多了SVN/Update的按鈕。你點擊他的時候他就更新SVN了咯。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章