使用 命令行/WinForm 来打包Unity可执行程序
前言
各位Unity开发者都一定被漫长的项目打包过程折磨过,同时公司的Git库一般都不上传各种日志文档和环境配置,克隆下来打开再打包可执行程序繁琐又耗时,这些对测试人员进行打包测试非常的不友好。
是否可以开发一款软件,让测试人员在GIT库上克隆仓库后可以直接进行打包,不再需要打开Unity来打包呢?
因此我想到了使用命令行来对Unity进行打包,再用WinForm套了个外壳,让操作更符合人的习惯。
一、编辑Editor打包工具
1.编辑打包脚本
在项目目录下新建一个C#脚本文件,命名为BuildScript,可以在该脚本中修改需要打包的场景,打包的目标路径和打包之后的程序名。
BuildScript代码如下:
using UnityEditor;
using UnityEngine;
public class BuildScript
{
private static string[] scenes = {
"Assets/Scenes/SampleScene.unity" }; //要打包的场景
private static string Path = "Build"; //打包的目标路径,默认为父路径下的Build文件夹
private static string GameName = "MyGame"; //打包后的程序名
/// <summary>
/// 打包成EXE
/// </summary>
[MenuItem("Build/Build EXE")]
public static void BuildEXE()
{
string WindowsPath = "/Windows/";
BuildPipeline.BuildPlayer(scenes, Path + WindowsPath + GameName + ".exe", BuildTarget.StandaloneWindows, BuildOptions.None);
Debug.Log(Path + WindowsPath + GameName + ".exe"+"已生成");
}
/// <summary>
/// 打包成APK
/// </summary>
[MenuItem("Build/Build APK")]
public static void BuildAPK()
{
string AndroidPath = "/Android/";
BuildPipeline.BuildPlayer(scenes, Path + AndroidPath + GameName + ".apk", BuildTarget.Android, BuildOptions.None);
}
}
2.Unity编辑器中样式
保存BuildScript脚本之后,回到 Unity 点击菜单栏 Build-Build EXE或Build-Build APK 即可进行打包。
二、命令行调用Unity打包函数
1.Unity命令行常用参数
可以查看:Unity命令行官方文档
-batchmode
在 批处理模式下运行Unity,它不会弹出窗口。当脚本代码在执行过程中发生异常或其他操作失败时Unity将立即退出,并返回代码为1。
-quit
命令执行完毕后将退出Unity编辑器。请注意,这可能会导致错误消息被隐藏(但他们将显示在Editor.log文件)
-buildWindowsPlayer
构建一个32位的Windows平台的exe(例如:-buildWindowsPlayer path/to/your/build.exe)
-buildWindows64Player
构建一个64位的Windows平台的exe(例如:-buildWindows64Player path/to/your/build.exe)
-importPackage
导入一个的package,不会显示导入对话框
-createProject
根据提供的路径建立一个空项目
-projectPath
打开指定路径的项目
-logFile
指定输出的日志文件
-nographics
当运行在批处理模式,不会初始化显卡设备,不需要GPU参与;但如果你需要执行光照烘焙等操作,则不能使用这个参数,因为它需要GPU运算。
-executeMethod
在Unity启动的同时会执行静态方法。也就是说,使用executeMethod我们需要在编辑文件夹有一个脚本并且类里有一个静态函数。
-single-instance
在同一时间只允许一个游戏实例运行。如果另一个实例已在运行,然后再次通过-single-instance启动它的话会调节到现有的这个实例。
-nolog
不产生输出日志。 通常output_log.txt被写在游戏输出目录下的*_Data文件夹中
2.命令行调用静态打包函数
在编译器所在目录下:
使用命令行输入,其中 “C:\Unity Project\PureMVC_study2” 是工程所在的目录,
-executeMethod BuildScript.BuildEXE是调用BuildScript中的静态方法BuildEXE。
Unity.exe -batchmode -nographics -quit -projectPath "C:\Unity Project\PureMVC_study2" -executeMethod BuildScript.BuildEXE
命令行执行完毕后会在工程目录下的Build文件夹中生成EXE文件。
注意:一个Unity工程只能打开一个实例,所以如果我们已经手动用Unity打开了工程,此时执行该命令是会报错的。请确保已关闭相应的工程。
三、使用WinForm创建可视化操作界面
此处可能用Python来写会更轻量快捷,因本人Python能力有限,故用C#来编写WinForm可视化界面。
1.可视化界面
可视化界面如下:
2.代码详细:
①CmdHelper类:
该类下RunCmd方法实现了调用CMD命令窗口
public class CmdHelper
{
private static string CmdPath = @"C:\Windows\System32\cmd.exe";
/// <summary>
/// 执行cmd命令
/// 多命令请使用批处理命令连接符:
/// <![CDATA[
/// &:同时执行两个命令
/// |:将上一个命令的输出,作为下一个命令的输入
/// &&:当&&前的命令成功时,才执行&&后的命令
/// ||:当||前的命令失败时,才执行||后的命令]]>
/// 其他请百度
/// </summary>
/// <param name="cmd"></param>