Version: 2020.1
Unity 的 Package Manager
全局缓存

概念

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

版本

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

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

清单

清单文件有两种类型:

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

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

注册表

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

包管理

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

The Unity Package Manager installs samples, tools, and assets on a per-project basis, rather than installing them across all projects for a specific machine or device. It uses a global cache to store downloaded package metadata and contents. Once installed in a project, Unity treats package assets just like any other asset in the project, except that these assets are stored inside the package folder and are immutable. You can only permanently change content from Local and Embedded package sources.

包状态和生命周期

After developing a package to the point where it is ready for Unity users to test it and provide feedback, a package enters the Preview state. Packages in this state usually appear in the Unity Editor with the label and often use preview as part of their version.

Unity’s release management only grants a package the verified status after it passes several testing stages and validation procedures, which also include checks for appropriate documentation, changelog, and license files. Packages in this state may appear in the Unity Editor with the label and never use preview as part of their version.

如果包的开发者对包进行更改或重大更改(引入某项破坏 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 注册表是因为它们被认为可以安全使用,但实际上从未经过验证。在上述两种情况下,这些包在实际生产中都可以安全使用。

The Package Manager window displays a tag that corresponds to some of these states.

包来源

来源描述了包的来源:

来源 描述
注册表 对于大多数的包,在您请求这些包时,Unity Package Manager 将它们从包注册表下载到计算机上的全局缓存中。这些包是不可变的,因此您可以在项目中使用这些包,但是不能修改这些包,也无法更改它们的包清单。
内置 这些包允许您启用或禁用 Unity 功能(例如,地形物理 (Terrain Physics)、动画 (Animation) 等)。这些包是不可变的。有关更多信息,请参阅内置包
嵌入式 项目文件夹中存储的所有包均为嵌入式。此来源与开发中状态相对应,因为当您开始新包的开发时,通常会将包所需的所有脚本、库、示例和其他资源放在项目文件夹下的文件夹中。
本地 You can install a package from any folder on your computer (for example, if you have cloned a development repository locally).
Tarball (local) You can install a package from a tarball file on your computer. The Package Manager extracts the package from the tarball and stores it in the cache. However, these packages are immutable, unlike installations from a local folder.
Git The Package Manager installs Git-based packages directly from a Git repository instead of from the registry server.

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

The Package Manager window displays a tag that corresponds to some of these sources. For more information, see Tags.

Unity 的 Package Manager
全局缓存