文章目录
前言
自动化打包的价值在于让程序员更轻松地创建和管理构建工具链,提高编程效率,将繁杂的工作碎片化,变成人人(游戏行业特指策划)都能快速掌握的操作。在Unity行业中,这部分工作通常由程序员负责维护,而不同于其他行业可能有专门的运维团队负责。
自动化打包的大体原理是通过Jenkins调用脚本命令行执行操作,从而完成其他软件或平台的功能,使得繁杂的工作变得更加高效和可控。
一、Unity工程准备
新建一个Unity新项目,将示例场景添加到Build Settings。
创建Editor文件夹,并在该文件夹内创建BuildEditor脚本。
在BuildEditor脚本中创建静态方法BuildPC,并在Unity栏目Tools/BuildPC测试能成功打包。
csharp
using UnityEditor;
public class BuildEditor
{
[MenuItem("Tools/BuildPC")]
public static void BuildPC() {
BuildPlayerOptions options = new BuildPlayerOptions();
string[] scenePaths = new string[EditorBuildSettings.scenes.Length];
for (int i = 0; i < EditorBuildSettings.scenes.Length; i++)
{
scenePaths[i] = EditorBuildSettings.scenes[i].path;
}
options.scenes = scenePaths;
options.target = BuildTarget.StandaloneWindows;
options.options = BuildOptions.None;
options.locationPathName = @"E:\JenkinsProject\Test.exe";
BuildPipeline.BuildPlayer(options);
}
}
二、Unity调取命令行
参考官方文档
实战一
目标:通过Jenkins平台打包Unity项目。
在Windows上,Jenkins命令行填入
bash
"C:\Program Files\Unity 2021.3.16f1\Editor\Unity.exe" -projectPath "E:\GameProject\BuildProject" -executeMethod BuildEditor.BuildPC -quit -batchmode
打包成功!
注意打包时项目不能被Unity打开,不然会导致打包失败。
实战二
目标:通过Jenkins平台打包Unity项目,但需要制定版号。
制定版号意味着我们需要将参数传递到unity,添加自定义参数并修改unity脚本。
1、添加自定义参数
2、命令行传参
bash
"C:\Program Files\Unity 2021.3.16f1\Editor\Unity.exe" -projectPath "E:\GameProject\BuildProject" --version:%_version% -executeMethod BuildEditor.BuildPC -quit -batchmode
3、脚本获取传递参数
cpp
using UnityEditor;
public class BuildEditor
{
[MenuItem("Tools/BuildPC")]
public static void BuildPC() {
string[] args = System.Environment.GetCommandLineArgs();
foreach (var a in args)
{
if (a.Contains("--version:"))
{
string version = a.Split(':')[1];
//设置版本号
PlayerSettings.bundleVersion = version;
}
}
BuildPlayerOptions options = new BuildPlayerOptions();
string[] scenePaths = new string[EditorBuildSettings.scenes.Length];
for (int i = 0; i < EditorBuildSettings.scenes.Length; i++)
{
scenePaths[i] = EditorBuildSettings.scenes[i].path;
}
options.scenes = scenePaths;
options.target = BuildTarget.StandaloneWindows;
options.options = BuildOptions.None;
options.locationPathName = @"E:\JenkinsProject\Test.exe";
BuildPipeline.BuildPlayer(options);
}
}
测试打包。
实战三
目标:通过Jenkins接入Luban,实现打表功能,完成后将数据上传git。
知道原理后,大家可自行实操,后续有空我会补上。
实战四
目标:在Unity打包安卓(apk)完成后将其上传到某平台(比如:飞书、钉钉之类)。
知道原理后,大家可自行实操,后续有空我会补上,安卓只需要配置一下sdk就可以出包了。
实战五
目标:在mac打包安卓(apk)和ios包(ipa)。
额,这个较麻烦点,但基本原理类似,而且在 macOS 上也有类似的控制台工具。如果没有实际工作需要,可能不会着急去更新相关内容。
总结
本文介绍了如何利用 Jenkins 实现 Unity 项目的自动化打包,并通过命令行传递参数指定版本号等内容。通过统一的工具链,我们提高了项目打包的效率和可控性,使版本管理更加灵活。