在 Unity 项目的开发生命周期中,工具版本的确定性往往比追求最新更为重要。然而,在实际的工程实践中,开发者面临的需求远比「使用最新版本」复杂得多,包括但不仅限于以下情境:
对于需要在线安装管理的工具包(比如 Interaction Toolkit、ARFoundation 等),Package Manager 的默认策略通常是推荐当前可用的「最新版」。而安装指定版本的 Package 相对比较有挑战性,因为这些工具包通常不提供离线下载文件,所以我们需要掌握在 Package Manager 中安装特定版本的技巧。
本文讨论的对象是通过 Package Manager 在线安装的工具包 Package(UPM),并非传统意义上的资源包(.unitypackage)。后续也将会使用 Package 指代前者。
此外,部分第三方厂商(如 PICO、Meta 等)提供的 SDK 通常支持离线安装方式,可直接从官方渠道获取历史版本,故不在本文讨论范围内。
在尝试复杂方法前,可先检查 Unity 原生提供的历史列表,在这里 Unity 会提供几个推荐的稳定版本。

提示:此列表通常只显示提供有限数量的版本,如上图所示,以 Interaction Toolkit 为例,仅提供一个降级选项 2.6.5,且没有提供升级选项如 3.3.0 等较高版本。若找不到所需版本,请参考以下方法。
这种方法适用于项目中尚未安装该 Package 的情况,能够在首次安装时直接指定版本,后续无需升降级操作。

Name: com.unity.xr.interaction.toolkit
Version: 3.0.3

如上图所示,该方法最大的门槛在于:开发者需要准确知道包的完整名称(Name),而这些名称通常类似于命名空间,既冗长又难记,对新手不太友好。
提示:关于 Package 名称的获取,可在 Package 右侧详情页中,找到标题下方一串类似命名空间的斜体字符串,对其进行复制即可。
针对手动输入包名容易出错的问题,我们可以利用各 Package 官方文档中的「快捷链接」来自动填充安装信息。这是一种更为便捷的技巧。


![[3.0.6] 版本的更新说明顶部,“Add version 3.0.6 by name.” 链接被红框标出](/images/posts/unity-package-specific-version/06-add-version-by-name-link.png)

如果已经安装了某个 Package,当需要进行版本升级或降级时,除了在编辑器内操作,还可以通过直接修改项目清单文件(manifest.json)的方式来实现。这种方法适合批量管理依赖或快速复制他人的环境配置。

manifest.json 的文件(注意:请勿修改 packages-lock.json),使用任意代码编辑器(如 VS Code)或记事本将其打开。
com.unity.xr.interaction.toolkit),将其冒号后的版本号手动修改为目标版本。例如,将 XRI 版本选定为 2.6.3,做如下修改:
提示:手动修改版本号时需要注意 JSON 语法,必须确保双引号、冒号和行尾的逗号都不缺失且被正确使用。任何一个字符的缺失都会导致 Unity 无法解析配置文件,进而导致编辑器启动时报错。
作为总结,以下是各方法的使用情境,作为决策参考:
另附四种方式的优劣势对比总结:
| 安装方法 | 核心优势 | 局限性 |
|---|---|---|
| 方法零:UI 历史 | 极速、官方验证 | 版本覆盖有限 |
| 方法一:按名添加 | 适合首次安装、已知版本 | 需手动查找冗长包名 |
| 方法二:文档快捷 | 自动填充、零出错 | 依赖网页文档同步情况 |
| 方法三:修改清单 | 批量管理、团队环境对齐 | 对 JSON 语法有格式要求 |
本文介绍的主要内容是如何安装,但这并不意味着在项目中可以随意安装任意版本的 Package。Unity 编辑器版本与 Package 版本之间存在着严格的「伴生关系」,版本过低或过高可能导致 API 不匹配,导致出现大量编译报错而使项目无法正常运行。

所以在执行升降级操作前,务必查阅官方文档的兼容性、工具依赖相关章节,确保选择的 Package 版本能够正常使用。
本文首发于微信公众号「XR技术研习社」:阅读原文