Unity3d使用Jenkins自动化打包(Windows)(二)

文章目录


前言

自动化打包的价值在于让程序员更轻松地创建和管理构建工具链,提高编程效率,将繁杂的工作碎片化,变成人人(游戏行业特指策划)都能快速掌握的操作。在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 项目的自动化打包,并通过命令行传递参数指定版本号等内容。通过统一的工具链,我们提高了项目打包的效率和可控性,使版本管理更加灵活。

相关推荐
九班长13 分钟前
Mirror的多人连接管理及房间系统
windows
一个懒鬼24 分钟前
Edge浏览器打开PDF文件显示空白(每次需要等上一会)
windows·pdf
o0向阳而生0o1 小时前
42、在.NET 中能够将⾮静态的⽅法覆写成静态⽅法吗?
c#·.net
com未来2 小时前
使用 NSSM 安装 Tomcat 11.0.6 为 Windows 服务
java·windows·tomcat
struggle20252 小时前
ebook2audiobook开源程序使用动态 AI 模型和语音克隆将电子书转换为带有章节和元数据的有声读物。支持 1,107+ 种语言
人工智能·开源·自动化
不要数手指啦3 小时前
Apifox使用方法
windows
虾球xz3 小时前
游戏引擎学习第277天:稀疏实体系统
c++·学习·游戏引擎
漫谈网络4 小时前
Telnet 类图解析
python·自动化·netdevops·telnetlib·网络自动化运维
虾球xz6 小时前
游戏引擎学习第276天:调整身体动画
c++·学习·游戏引擎
虾球xz6 小时前
游戏引擎学习第275天:将旋转和剪切传递给渲染器
c++·学习·游戏引擎