Version: 6000.3
语言: 中文
自定义播放器
减小构建的文件大小

增量生成管道

为了在开发过程中更快地迭代,Unity 使用增量构建管道,仅在应用程序的部分自上次构建以来发生更改时才重新构建应用程序的一部分,包括内容构建、代码编译、数据等构建步骤压缩一种存储数据的方法,可减少所需的存储空间量。请参阅纹理压缩动画压缩音频压缩构建压缩
请参阅术语表
,并签名。

增量生成管道适用于 Mono 和IL2CPP Unity 开发的脚本后端,在为某些平台构建项目时,可以将其用作 Mono 的替代方案。更多信息
请参阅术语表
脚本后端为Unity中的脚本提供支持的框架。Unity 支持三种不同的脚本后端,具体取决于目标平台:Mono、.NET 和 IL2CPP。但是,通用 Windows 平台仅支持两个:.NET 和 IL2CPP。更多信息
请参阅术语表
,尽管输出文件结构会根据项目使用的脚本后端而变化。

默认情况下,Unity 对发布和开发版本开发版本包括调试符号并启用性能分析器。更多信息
请参阅术语表
.请参阅下面的创建干净构建部分,了解如何进行干净构建的详细信息。

注意:增量构建管道在构建 AssetBundle 时不适用。AssetBundle 具有单独的机制,用于缓存和重用先前构建的结果。

平台兼容性

Unity 支持以下平台的增量构建管道:

  • 独立(Windows、Mac 和 Linux)
  • Xbox One的
  • Xbox Series X 和 Xbox Series S
  • 人造人
  • iOS系统
  • tv作系统

创建干净的构建

“干净生成”或“非增量生成”涉及完全重新生成所有内容和代码,而不依赖于以前生成的缓存结果。在准备发布版本或解决由损坏或过时的构建缓存引起的问题时,干净构建特别有用。

在某些情况下,创建不使用增量生成管道的生成可能有用或必要。例如,在准备将要发布的正式版本时,您应该运行干净的版本。

要创建干净的非增量,请构建:

  1. 打开“构建配置文件”窗口(“文件”>“构建配置文件”)。
  2. “生成”按钮旁边,选择下拉列表。
  3. 选择“干净生成”

通过在调用 BuildPipeline.BuildPlayer 时传递 BuildOptions.CleanBuildCache,可以从生成脚本创建干净的生成。

通常,如果增量生成后不存在预期更改,并且您认为增量生成管道存在问题,请创建干净生成。

生成的内容步骤是当 Unity 序列化场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
以及目标平台的资产。如果增量构建管线确定自上次成功构建以来没有任何内容发生变化,则它将重用上一个构建的整个内容输出。这始终是一个“全有或全无”的决定。此计算有时可能存在缺陷,例如,即使在您更改了影响构建输出的全局设置后,它也可能会重用内容。在这种情况下,您应该创建一个干净的构建。

增量构建期间的构建回调

一些构建回调发生在播放器构建的内容步骤中:

当重复使用先前版本中的内容时,Unity 不会重新触发这些回调。不会调用它们,因为假定回调已经在上一个版本上运行,因此由回调引起的任何内容更改都已经缓存在上一个版本的输出中。

当您更改回调的实现并希望确保它再次运行时,请运行干净的构建或更改作为构建一部分的场景或资产之一的内容。

在增量生成期间,可能会在生成的内容阶段之前或之后调用的其他生成回调再次触发。在这种情况下,回调实现应注意它可能在已调用回调的构建的上下文中运行。例如,如果回调向 Android 应用清单添加了新条目,则当文件中已有这些条目时,应小心正常工作,以避免创建无效文件。

强制仅脚本构建

仅脚本构建是有意重用上一个构建中的内容,而不是重新构建它的构建。

测试脚本更改时,强制使用仅脚本构建以避免重建内容所需的时间会很有用。如果您知道有数据更改,但想要快速测试代码更改,而不为此目的应用挂起的数据更改,这将非常有用。

可以通过在 构建配置文件(Build Profiles) 窗口的 构建(Build) 菜单中选择 强制跳过数据构建(Force skip data build) 来创建这种类型的构建。自定义构建脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表
可以在调用时传递 BuildOptions.BuildScriptsOnly 标志BuildPipeline.BuildPlayer.

增量生成管道自动执行“仅脚本生成”功能,因此在支持该功能的平台上,只要内容未更改,就会自动重复使用先前生成中的内容。在这种情况下,无需显式调用仅脚本生成。

注意:如果项目中脚本的序列化布局发生任何更改,则“强制跳过数据构建”选项将不起作用。例如,当你向 MonoBehaviour 添加新字段时,你必须执行常规或干净的玩家构建,以序列化资产以匹配新的类定义。

缓存位置

在正常使用过程中,无需了解 Unity 将与 Player Build 相关的缓存和元数据文件存储在何处。但是,在某些情况下,了解有关缓存位置的更多详细信息可能会有所帮助,例如,在调查磁盘空间不足或生成问题时。

大多数缓存的构建内容都存储在项目的库目录中,特别是Library/Bee目录。构建中的内容暂存并缓存在特定于平台的子目录中Library/PlayerDataCache.

如果项目中已实现 OnPostBuildPlayerScriptDLLs 回调,则Temp/StagingArea/Data/Managed在构建过程中,位置也用于存储程序集。

增量生成管道的内容重用方面依赖于文件ScriptsOnlyCache.yamlDataBuildDirtyInfo.jsonLibrary/PlayerDataCache目录。这些记录有关内容的最新版本的信息,并且在决定是否可以重复使用该内容时是必需的。如果其中任何一个文件丢失,Unity 将执行全新构建。

Library目录还存储着色器缓存和资产数据库,它们都缓存数据并有助于加快后续播放器构建速度。

增量构建管道还具有一个机器级缓存,可在不同项目中重用构建的某些特定部分(例如非嵌入式包和 libIL2CPP 工件)。构建的其他部分(例如内容构建)是特定于项目的,不会从此缓存中看到性能改进。此缓存的位置是使用BEE_CACHE_DIRECTORY环境变量,并且默认为不同的位置,具体取决于您的作系统:

  • 在 Windows 上,BEE_CACHE_DIRECTORY默认为%USERPROFILE%\AppData\Local\Unity\Caches\bee
  • 在 Mac 上,BEE_CACHE_DIRECTORY默认为$HOME/Library/Unity/cache/bee
  • 在 Linux 上,BEE_CACHE_DIRECTORY默认为$XDG_CONFIG_HOME/.cache/unity3d/bee(如果$XDG_CONFIG_HOME已设置)或$HOME/.cache/unity3d/bee

注意:手动修改或删除这些文件(在 Unity 之外)可能会导致后续构建期间出现意外问题。这些位置和文件名可能会在 Unity 版本之间发生变化。如果遇到与缓存相关的生成问题,请考虑执行全新生成。

自定义播放器
减小构建的文件大小