作用域注册表允许 Unity 将任何自定义包注册表服务器的位置传达给 Package Manager,以便您可以同时访问多个包集合。
以下是一些重要概念,可帮助您理解此功能:
| 概念 | 描述 |
|---|---|
| 包注册表服务器 | 跟踪包并提供包存储位置的一种应用程序。在 Unity 的 Package Manager 窗口中,当您选择 Unity Registry 上下文时,所有在 Unity 注册表中注册的包都出现在列表面板中。 |
| Package Manager | 一种应用程序,它告诉用户哪些包是可用的,并下载和安装用户为其项目请求的任何包。Unity 已经实现了自己版本的 Package Manager,但在其他组织中也有几个类似的应用程序。 |
| 作用域 | 定义包名称或命名空间(采用反向域格式),例如 com.example.mycompany.animation 或 com.example。当用户请求包时,Package Manager 从最匹配该作用域的注册表中获取包。有关更多信息,请参阅下面的管理项目的作用域注册表。 |
与作用域注册表交互的方式取决于您的角色:
作为包提供商,请确保您设置的所有包注册表服务器符合 Unity 的服务条款和 Unity 的包指导原则和指南。Unity 提供对 Package Manager 的访问以促进知识和创作的共享,但不是作为第三方产品的市场。
作为包使用者,安装作用域注册表时,应像安装其他任何第三方软件一样谨慎:
作用域注册表可以帮助:
通过分发工具、库和其他资源来提供新的功能。
作为提供者,您可以创建自己的注册表来分发工具和脚本(或其他类型的资源),版本号表明包的成熟度。版本号还指示更新是基于语义版本控制引入重大 API 更改还是小修复。您的代码可以依赖于其他包中的代码,因为 Package Manager 支持包的依赖关系。
作为使用者,您在 Package Manager 中浏览和安装第三方自定义包的体验与浏览 Unity 包相同。
扩展现有 Unity 包的功能。
作为使用者,您可以获得无缝体验,其中自定义包可覆盖 Unity 包,而无需手动更改注册表或显式安装不同的包版本。这是因为您可以将包映射到特定的注册表,以便 Package Manager 从 Unity 注册表或自定义包注册表服务器获取。
在封闭网络环境中访问包。
某些组织在封闭的网络中工作,这使得访问 Unity 的包注册表变得困难。在这些情况下,组织可以在其封闭网络内的服务器上设置自己的包注册表。然后,网络管理员可以定期与 Unity 的包注册表同步,以确保作用域注册表具有最新的可用包集合。
如果您是包裹使用者,请参阅管理项目的作用域注册表了解有关如何连接到 Unity 项目中现有的自定义包注册表服务器的信息。如果您是包制作者,请参阅共享包以了解有关支持的包注册表服务器的信息。此信息还包括有关如何设置它们以便与作用域注册表一起使用的信息的链接。
注意:如果您正在设置作用域注册表指向具有受限访问权限的包注册表服务器,您可以配置 Package Manager 将您的 npm 身份验证令牌传递给服务器。有关更多信息,请参阅作用域注册表身份认证。
使用项目设置 (Project Settings) 窗口的 Package Manager 类别可以添加、修改或删除项目的作用域注册表。
如果您在一个共享项目中工作,并且另一个用户向该项目添加了一个作用域注册表,Unity 会警告您另一个用户已经添加了一个新的作用域注册表。
当您单击关闭 (Close) 按钮,将出现 Package Manager 项目设置窗口,您可以添加、修改或者移除项目的作用域注册表。
如果单击阅读更多 (Read more),Unity 将在默认 Web 浏览器中打开当前正在阅读的页面。
提示:要随时访问 Package Manager 项目设置窗口,请使用 Unity 中的主菜单(__编辑 (Edit) > 项目设置 (Project Settings),然后 Package Manager__ 类别)。您还可以从 Package Manager 窗口的高级设置菜单中选择__高级项目设置 (Advanced Project Settings)__。
要管理项目中的作用域包注册表,可以:
项目清单使用一个 scopedRegistries 属性,其中包含一个作用域注册表配置对象数组。每个对象都具备以下属性:
| 属性 | JSON 类型 | 描述 |
|---|---|---|
| name | 字符串 | 作用域名称,在用户界面中显示。Package Manager 窗口在详细信息面板中显示此名称。 例如, "name": "Tools"。 |
| url | 字符串 | 与 npm 兼容的注册表服务器的 URL。 例如: "url": "https://mycompany.example.com/tools-registry"注意:并非所有注册表提供程序都与 Unity 的 Package Manager 兼容。确保您要添加的包注册表服务器实现了 /-/v1/search 或 /-/all 终端。 |
| overrideBuiltIns | 布尔值 |
true 或 false 值,用于确定要使用的内置包的版本(如果包存在于作用域注册表中)。如果设置为 false,Package Manager 将使用 Unity 编辑器附带的内置版本。这是默认值。如果设置为 true,并且内置包也存在于作用域注册表中,则 Package Manager 会下载作用域注册表中的版本。此属性的作用域适用于 url 属性中标识的所有包。 |
| scopes | 字符串数组 | 可以映射到包名称的作用域数组,映射方式既可以是与包名完全匹配,也可以是作为命名空间进行匹配。不支持通配符和其他全局模式。 例如: "scopes": [ "com.example", "com.example.tools.physics" ]注意:此配置类型假定包遵循反向域名表示法。这样可以确保 com.unity 等同于与 com.unity 命名空间匹配的任何包名称,例如 com.unity.timeline 或 com.unity.2d.animation。警告:Unity 不支持 npm 的作用域表示法。 |
在以下项目清单中,有两个作用域注册表(General 和 Tools):
{
"scopedRegistries": [
{
"name": "General",
"url": "https://example.com/registry",
"overrideBuiltIns": false,
"scopes": [
"com.example", "com.example.tools.physics"
]
},
{
"name": "Tools",
"url": "https://mycompany.example.com/tools-registry",
"overrideBuiltIns": true,
"scopes": [
"com.example.mycompany.tools"
]
}
],
"dependencies": {
"com.unity.animation": "1.0.0",
"com.example.mycompany.tools.animation": "1.0.0",
"com.example.tools.physics": "1.0.0",
"com.example.animation": "1.0.0"
}
}
Package Manager 决定从哪个注册表获取包时,会将包 name 的值与 scopes 的值进行比较,并找到 scopes 最匹配的注册表。
com.example.animation 包时,发现 com.example 命名空间与其名称最匹配,并且从 General 注册表获取包。com.example.tools.physics 包时,General 注册表具有与包名称完全匹配的作用域。com.example.mycompany.tools.animation 包时,Package Manager 发现 com.example.mycompany.tools 命名空间与其名称最匹配,因此从 Tools 注册表获取包。虽然它也与 General 作用域匹配,但 com.example 命名空间的匹配程度并不高。com.unity.animation 包时,Package Manager 在任何作用域注册表中都找不到匹配项。在这种情况下,它会从默认注册表获取包。如果 General 和 Tools 注册表在编辑器中也有内置包,Package Manager 会按如下方式进行解析:
General 作用域注册表中的内置包,因为 overrideBuiltIns 值为 false。相反,Package Manager 使用 Unity 编辑器附带的内置版本。Tools 作用域注册表中的内置包而不是编辑器,因为 overrideBuiltIns 值为 true。