使用 命令行/WinForm 来打包Unity可执行程序

-
在 批处理模式下运行Unity,它不会弹出窗口 。当脚本代码在执行过程中发生异常或其他操作失败时Unity将立即退出,并返回代码为1 。
-quit
命令执行完毕后将退出Unity编辑器 。请注意,这可能会导致错误消息被隐藏(但他们将显示在.log文件)
-
构建一个32位的平台的exe(例如:- path/to/your/build.exe)
-
构建一个64位的平台的exe(例如:- path/to/your/build.exe)
-
导入一个的,不会显示导入对话框
-
根据提供的路径建立一个空项目
-
打开指定路径的项目
-
指定输出的日志文件
-
当运行在批处理模式,不会初始化显卡设备,不需要GPU参与;但如果你需要执行光照烘焙等操作,则不能使用这个参数,因为它需要GPU运算 。
-
在Unity启动的同时会执行静态方法 。也就是说,使用我们需要在编辑文件夹有一个脚本并且类里有一个静态函数 。
--
在同一时间只允许一个游戏实例运行 。如果另一个实例已在运行,然后再次通过--启动它的话会调节到现有的这个实例 。
-nolog
不产生输出日志 。通常.txt被写在游戏输出目录下的*_Data文件夹中
2.命令行调用静态打包函数

使用 命令行/WinForm 来打包Unity可执行程序

文章插图
在编译器所在目录下:
使用命令行输入,其中 “C:\Unity \” 是工程所在的目录,
- .是调用中的静态方法 。
Unity.exe -batchmode -nographics -quit -projectPath "C:\Unity Project\PureMVC_study2" -executeMethod BuildScript.BuildEXE
命令行执行完毕后会在工程目录下的Build文件夹中生成EXE文件 。
注意:一个Unity工程只能打开一个实例,所以如果我们已经手动用Unity打开了工程,此时执行该命令是会报错的 。请确保已关闭相应的工程 。
三、使用创建可视化操作界面
此处可能用来写会更轻量快捷,因本人能力有限,故用C#来编写可视化界面 。
1.可视化界面
可视化界面如下:
2.代码详细: ①类:
该类下方法实现了调用CMD命令窗口
public class CmdHelper{private static string CmdPath = @"C:\Windows\System32\cmd.exe";/// /// 执行cmd命令/// 多命令请使用批处理命令连接符:/// /// 其他请百度/// /// /// public static void RunCmd(string cmd, out string output){cmd = cmd.Trim().TrimEnd('&') + "&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时,会处于假死状态using (Process p = new Process()){p.StartInfo.FileName = CmdPath;p.StartInfo.UseShellExecute = false;//是否使用操作系统shell启动p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息p.StartInfo.RedirectStandardError = true;//重定向标准错误输出p.StartInfo.CreateNoWindow = true;//不显示程序窗口p.Start();//启动程序//向cmd窗口写入命令p.StandardInput.WriteLine(cmd);p.StandardInput.AutoFlush = true;//获取cmd窗口的输出信息output = p.StandardOutput.ReadToEnd();p.WaitForExit();//等待程序执行完退出进程p.Close();}}}
②打包EXE的:
private void button1_Click(object sender, EventArgs e){MessageBox.Show("EXE正在打包中");string EditorPath = textBox1.Text;//编辑器地址string GamePath = textBox2.Text;//要打包的程序地址string cmd = @"cd " + EditorPath + "&&" + "Unity.exe -batchmode -nographics -quit -projectPath \"" + GamePath + "\" -executeMethod BuildScript.BuildEXE";GamePath = textBox1.Text;string output = "";CmdHelper.RunCmd(cmd, out output);MessageBox.Show("EXE打包完成");}