作用域注册表允许 Unity 将任何自定义包注册表服务器的位置告知包管理器,以便您可以同时访问多个包集合。
以下是一些重要的概念,可以帮助您理解此功能。
概念 | 描述 |
---|---|
包注册表服务器 | 跟踪包并提供存储位置的应用程序。在 Unity 的包管理器窗口中,当您选择Unity 注册表上下文时,在 Unity 注册表上注册的所有包都会出现在列表面板中。 |
包管理器 | 告知用户哪些包可用的应用程序,并下载和安装用户为其项目请求的任何包。Unity 已实现其自己的包管理器版本,但在其他组织中还有几个类似的应用程序。 |
作用域 | 定义一个包名称或命名空间(以反向域名格式),例如 com.example.mycompany.animation 或 com.example 。当用户请求一个包时,包管理器会从最匹配作用域的注册表中获取该包。有关更多信息,请参阅下面的管理项目的范围注册表。 |
作为包提供者,请确保您设置的任何包注册表服务器都符合 Unity 的服务条款和Unity 的包指导原则和指南。Unity 提供对包管理器的访问,以促进知识和创作的共享,但不是作为第三方产品的市场。
作为包使用者,当您安装作用域注册表时,请使用与安装任何其他第三方软件相同的谨慎程度。
作用域注册表可以帮助您
通过分发工具、库和其他资产来提供新的功能.
作为提供者,您可以创建自己的注册表来分发工具和脚本允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性并以您喜欢的任何方式响应用户输入的代码段。 更多信息
请参见词汇表(或其他类型的资产),并使用版本号来指示包的成熟度。版本号还根据语义版本控制指示更新是否引入了重大 API 更改或次要修复。您的代码可以依赖于其他包中的代码,因为包管理器支持包依赖项。
作为使用者,您在包管理器中浏览和安装第三方自定义包的体验与浏览 Unity 的包相同。
扩展现有的 Unity 包功能.
作为使用者,您可以享受无缝体验,其中自定义包会覆盖 Unity 包,而无需手动更改注册表或显式安装其他包版本。这是因为您可以将包映射到特定注册表,以便包管理器从 Unity 注册表或自定义包注册表服务器中获取包。
访问封闭网络环境中的包.
一些组织在封闭网络内工作,这使得访问 Unity 的包注册表变得困难。在这些情况下,组织可以在其封闭网络内的服务器上设置自己的包注册表。然后,网络管理员可以定期与 Unity 的包注册表同步,以确保作用域注册表拥有最新的可用包集。
如果您是包使用者,请参阅管理项目的范围注册表,以了解如何在 Unity 项目中连接到现有的自定义包注册表服务器。如果您是包生产者,请参阅共享您的包,以了解支持的包注册表服务器。此信息还包括有关如何将其设置为与作用域注册表一起使用的链接。
注意:如果您正在设置一个指向具有访问限制的包注册表服务器的作用域注册表,您可以配置包管理器将您的 npm
身份验证令牌传递到服务器。有关更多信息,请参阅作用域注册表身份验证。
如果您在共享项目中工作,而另一个用户向项目添加了作用域注册表,Unity 会警告您另一个用户添加了新的作用域注册表。
当您单击关闭时,包管理器项目设置允许您配置物理、音频、网络、图形、输入和项目的许多其他领域的行为的大量设置集合。 更多信息
请参见词汇表窗口将出现,以便您可以添加、修改或删除项目的范围注册表。
如果您单击阅读更多,Unity 会在您的默认 Web 浏览器中打开您当前正在阅读的页面。
提示:要随时访问包管理器项目设置窗口,请使用 Unity 中的主菜单(编辑 > 项目设置,然后是包管理器类别)。您也可以从包管理器窗口中的高级设置菜单中选择高级项目设置。
要管理项目中的作用域包注册表,您可以直接编辑您的项目清单每个 Unity 项目都有一个项目清单,它充当包管理器的入口点。该文件必须位于 <project>/Packages
目录中。包管理器使用它来配置许多事情,包括该项目的依赖项列表,以及查询包的任何包存储库。 更多信息
请参见词汇表文件,或者使用包管理器项目设置窗口让 Unity 为您更改清单。
项目清单使用scopedRegistries属性,该属性包含作用域注册表配置对象的数组。每个对象都具有以下属性。
属性 | JSON 类型 | 描述 |
---|---|---|
name | 字符串 | 在用户界面中显示的作用域名称。包管理器窗口会在详细信息面板中显示此名称。 例如, "name": "Tools" 。 |
url | 字符串 | 与 npm 兼容的注册表服务器的 URL。 例如, "url": "https://mycompany.example.com/tools-registry" 注意:并非所有注册表提供者都与 Unity 的包管理器兼容。确保您要添加的包注册表服务器实现了 /-/v1/search 或 /-/all 端点。 |
scopes | 字符串数组 | 可以映射到包名称的作用域数组,无论是作为包名称的精确匹配,还是作为命名空间。不支持通配符和其他 glob 模式。 例如, "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",
"scopes": [
"com.example", "com.example.tools.physics"
]
},
{
"name": "Tools",
"url": "https://mycompany.example.com/tools-registry",
"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"
}
}
当包管理器查找 com.example.animation
包时,它会发现 com.example
命名空间与其名称最匹配,并从“General”注册表中获取该包。
当包管理器查找 com.example.tools.physics
包时,“General”注册表具有与包名称完全匹配的作用域。
当包管理器查找 com.example.mycompany.tools.animation
包时,包管理器会发现 com.example.mycompany.tools
命名空间与其名称最匹配,并从“Tools”注册表中获取该包。即使它也匹配“General”作用域,但 com.example
命名空间的匹配程度并不高。
当包管理器查找 com.unity.animation
包时,包管理器不会在任何作用域注册表中找到匹配项。在这种情况下,它会从默认注册表中获取该包。