Version: 2019.4
Unity 的 Package Manager
全局缓存

概念

本节介绍有关 Unity Package Manager 功能的许多概念:

版本

每个包都有多个版本,标记了该包在自身的生命周期中所经历的更改。每次开发人员更新包时,都会为该包提供一个新的版本号。包版本的更改会告诉您这次更改包含了重大更改(主要)、新的向后兼容功能(次要)还是仅错误修复(补丁),并遵循语义版本控制

要查看特定包可用的版本列表,请参阅查找特定版本

清单

清单文件有两种类型:

  • 项目清单 (manifest.json)。项目清单存储 Package Manager 在查找和加载正确的包时所需的信息,并列出声明为依赖项的包和版本。
  • 包清单 (package.json)。包清单存储有关特定包的信息,并列出该包所需的包和版本。

这两种文件都使用 JSON(JavaScript 对象表示法)语法。

注册表

Unity 维护了一个可供分发的官方包的中央注册表。包注册表存储每个包版本的包内容和相关信息(元数据)。默认情况下,所有项目都使用官方的 Unity 包注册表,但是您可以添加其他注册表来存储和分发私有包或在开发期间暂存包。

包管理

Unity Package Manager 是管理整个包系统的工具。此工具的主要任务包括:

  • 与 Unity 注册表以及您指定的任何其他注册表通信。
  • 读取您的项目清单并获取包内容和元数据。
  • 安装、升级和卸载包,无论这些包是项目的依赖项还是某个已安装的包。
  • 启用和禁用 Unity 的内置包。
  • 显示有关每个包的每个版本的信息。
  • 当项目及其中的包需要多个包版本时解决冲突

Unity Package Manager 针对每个项目安装示例、工具和资源,而不是针对特定机器或设备的所有项目中安装它们。此工具使用全局缓存来存储下载的包元数据和内容。安装后,Unity 会像处理项目中的任何其他资源一样对待包资源,只不过包资源存储在包文件夹中并且__不可变__。只能永久性地更改来自本地嵌入式包来源的内容。

包状态和生命周期

在一个包开发达到 Unity 用户可以测试包并提供反馈的阶段后,该包进入预览状态。处于这种状态的包在 Unity Editor 中显示时通常带有 preview 标签,并通常在其版本中使用 preview 字样。

仅当一个包通过多个测试阶段和验证过程(包括对相应文档、变更日志和许可证文件进行检查)之后,Unity 的版本管理功能才会向该包授予已验证 (verified) 状态。处于这种状态的包在 Unity Editor 中显示时可能会带有 2019.3 verified 标签,并且绝不会在其版本中使用 preview 字样。

如果包的开发者对包进行更改或重大更改(引入某项破坏 API 或影响其使用的更改),则该包将回到“预览”(Preview) 状态,并且 Package Manager 不建议使用新的预览包作为已验证版本的更新选项。

Unity Package Manager 中的包生命周期
Unity Package Manager 中的包生命周期

以下状态表示包在开发周期中所处的阶段:

状态 描述
开发中 (In Development) 包开发者创建包。通常,这相当于将包嵌入到开发者的项目中。
预览 (Preview) 当包准备好接受测试时,Unity 包开发者将确保基本的测试覆盖范围,并且确保该包通过了包验证套件 (Package Validation Suite) 的测试。该包还至少需要初步文档、更新的变更日志和授权许可,然后 Unity 包开发者才能申请在 Unity 的官方注册表上发布该包。

到此时为止,该包可供测试,这样任何符合条件的 Unity 用户都可以向开发者提供反馈。大多数包都可供任何 Unity 用户使用,但少数包仅限具有特定权利的 Unity ID 使用。

预览包可能要经历许多次更改,然后才能变为适合特定 Unity 版本的已验证状态。在将来的某个时候,预览包可能会通过验证要求;但是,它们也可能被弃用。由于不能保证将来会获得支持,因此不应在实际生产中使用预览包。有关该版本可用的预览包的列表,请参阅预览包
已验证 (Verified) 该包已经过严格的测试,通过了验证并可以安全地在特定 Unity 版本上使用,也可以和其他已针对同一版本进行了验证的包一起使用。此状态仅适用于 Unity 内部开发的包。对于第三方的包,请与相应的开发者联系,以询问有关其特定流程的信息。

当某个包针对某一 Unity 版本经过验证后,Unity 保证在该 Unity 版本的存续期间支持这个经验证的包(在整个长期支持周期内),并且不允许进行任何主要或次要更新(即,那些会破坏或更改 API 的更改)。对于每个新的 Unity 版本,每个已验证的包都必须再次经历验证过程,然后 Package Manager 才将其视为已验证。

要查看已针对此 Unity 版本验证过的包列表,请参阅已验证包

注意:有些包既不是已验证的包,也不是预览包。在许多情况下,这是因为包在 Unity 的之前版本中进行了验证,但尚未针对当前版本完成验证过程。有些包已发布到 Unity Package Manager 注册表是因为它们被认为可以安全使用,但实际上从未经过验证。在上述两种情况下,这些包在实际生产中都可以安全使用。

Package Manager 窗口会显示与上述某些状态对应的标签

包来源

来源描述了包的来源:

来源 描述
注册表 对于大多数的包,在您请求这些包时,Unity Package Manager 将它们从包注册表下载到计算机上的全局缓存中。这些包是不可变的,因此您可以在项目中使用这些包,但是不能修改这些包,也无法更改它们的包清单。
内置 这些包允许您启用或禁用 Unity 功能(例如,地形物理 (Terrain Physics)、动画 (Animation) 等)。这些包是不可变的。有关更多信息,请参阅内置包
嵌入式 项目文件夹中存储的所有包均为嵌入式。此来源与开发中状态相对应,因为当您开始新包的开发时,通常会将包所需的所有脚本、库、示例和其他资源放在项目文件夹下的文件夹中。
本地 可从计算机上的任何文件夹中安装安装包(例如,如果在本地克隆了开发代码仓库)。
本地 tarball 可通过计算机上的 tarball 文件来安装包。Package Manager 从 tarball 中提取包并将其存储在缓存中。但是,与从本地文件夹安装不同,这些包是不可变的。
Git Package Manager 直接从 Git 代码仓库安装 Git 包,而不是从注册表服务器进行安装。

要编辑包的包清单,请参阅检查包

Package Manager 窗口会显示与上述某些来源对应的标签。有关更多信息,请参阅标签

Unity 的 Package Manager
全局缓存