Unity的打包管线和自动化

从Build开始说起

Unity自己把资源工作流程划分为几部分

https://docs.unity3d.com/cn/2023.2/Manual/AssetWorkflow.html

导入 然后在编辑器下组合和修改 然后就到了Build这一步 也就是构建

什么是构建呢?

构建是指将已完成的项目导出为二进制文件的过程,然后您可以在您选择的平台上分发和运行该文件。例如,在针对 Windows 进行构建时,Unity 会生成一个.EXE文件以及一些随附的数据文件,然后您可以分发这些文件。

如果您使用 Addressables 或 Asset Bundles 将您的资源分组为单独的下载包中,您还需要构建这些包文件以进行分发。

简单来说就是针对不同的设备平台 把编辑器里做好的东西打包出来 这个过程就是构建

构建之后就可以通过各种渠道进行分发(Steam等等)最后资源会在用户设备上被读取出来

文档里也提到了Addressable和AB包对资源进行分组的事情 这个就是另外一方面的问题了(深坑)


构建管线——BuildPipeline

构建管线 和渲染管线概念上比较类似 可以理解为构建的一整套流程

不过我一般叫的比较顺手 都叫打包管线 因为构建这个词确实很学术不是吗

Unity的历史中有三种主要的打包管线出现

  • 5.X和2017时代 BuildPipeline.BuildPlayer 早期的传统管线 现在已经不用了
  • 2018至今 BuildPipeline.BuildAssetBundles 现在的默认管线 也是最常用的 你现在默认在Build窗口按下Build in就是走这个管线
  • 2019至今 SBP全名Scriptable Build Pipeline 比较新的管线 默认管线只在C++层下跑 SBP则是在公共C#层跑的

默认管线和SBP还是有不少区别的 但是SBP在现在的项目里用的还不是很多(新东西商业化比较慢 但应该是有人用的)

SBP——Scriptable Build Pipeline

https://docs.unity3d.com/Packages/[email protected]/manual/index.html

https://zhuanlan.zhihu.com/p/366780685

https://zhuanlan.zhihu.com/p/369264807

https://www.yooasset.com/docs/guide-editor/AssetBundleBuilder

SBP同样会构建AB包 但SBP在文档里提到了 建议新的项目去用Addressable构建AB包 而不是直接用SBP

它和默认管线相比有几个优势 可自定义化的程度高 AB包构建的速度提高了

甚至可以做到指定每个AB包的压缩形式和程度

但指南里推荐用Addrassable 我想还是因为代码自定义比较复杂的原因吧

需要在资源管理上有很多经验的老手才能做好

SBP和Addressable的关系

https://docs.unity3d.com/Packages/[email protected]/manual/build-intro.html

https://zhuanlan.zhihu.com/p/500535555

首先 Addressable(以下简称AA)主要提供的是寻址的服务

实际上它也是在调用构建管线去构建AB包的

只是你可以直接用SBP去自定义构建的流程然后替换掉原本Build界面下的Build in按钮干的事情

你可以用AA按照你当前标记好的Group进行构建

AA提供了开发过程中的Build测试(就在AA窗口下可以先Build 然后让编辑器使用Existing Build进行资源读取)

总之AA的构建AB包过程是可以被更改的 功能主要还是体现在寻址这两个字上


自动化打包?

当你自己做Demo的时候 打包肯定没有那么多讲究 点开Build 选一下打包的场景 然后build in按钮按下

等进度条跑完之后 windows就会弹出打包后的文件了 这听起来没啥毛病

但是商业项目里 一次Build的时间可比你想的要长多了 假如一次构建要花40分钟 你每天就有40分钟没办法做开发工作

你能接受PM可不能接受 所以就有了专门用来打包的打包机和一套自动化的打包流水线

所谓自动化打包 简单概括一下就是

只针对Windows或安卓的游戏 有一台Windows打包机 利用bat去调用Unity的Build

双端 安卓和IOS游戏 有一台Mac打包机 利用shell去调用Unity的Build

然后不管是什么系统的打包机 都有个自动化的管理和定时工具去控制bat或者shell的执行

这就是自动化打包

Jenkins在Mac下全自动打包

http://www.xuanyusong.com/archives/3349

https://zhuanlan.zhihu.com/p/40657950

https://www.cnblogs.com/jietian331/p/16857040.html

偷懒了 这里不打算讲太多 我个人认为这部分适合运维干 当然客户端可能也要操心这个就是了

Jenkins是一个自动化管理工具 可以做到同一局域网下 只要有浏览器就可以通过Jenkins来让目标设备自动的 定时的执行某一项任务

上面说的 我们可以利用Shell脚本去控制Unity对项目进行打包

就要利用Jenkins帮我们干这件事 流程跑通了 你就可以把Jenkins接进企业微信机器人或者飞书机器人啥的 可以看到构建的结果和报错信息

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注