PackageManager
Unity Package Manager(简称UPM)是Unity官方的包管理工具,用于安装、更新、移除引擎官方功能包和第三方包。现代Unity工程中大量功能都以包的形式提供,因此Package Manager是日常开发中绕不开的工具。
包和manifest.json
在Unity中,包(Package)是一种分发引擎功能的单元,它通常包含若干脚本、资源和一个package.json描述文件,其中声明了包名、版本、依赖等。Unity将越来越多的功能从引擎本体中剥离成独立的包,这样引擎核心保持精简,功能包可以独立迭代更新。
工程依赖了哪些包,记录在工程根目录Packages/manifest.json文件中,典型的内容例子如下。
{
"dependencies": {
"com.unity.inputsystem": "1.7.0",
"com.unity.cinemachine": "2.9.7",
"com.unity.textmeshpro": "3.0.9",
"com.unity.ugui": "1.0.0",
"com.unity.modules.physics2d": "1.0.0"
}
}
dependencies中每一项是包标识符: 版本号,官方包标识符统一以com.unity.开头- 以
com.unity.modules.*结尾的是引擎内置模块(例如物理、音频、UI 等),默认全部启用,一般不需要动 - 我们通过Package Manager窗口做的所有安装、移除、版本切换操作,最终都会反映到这个文件中
Packages/目录必须提交版本库,克隆工程后打开时,Unity会根据manifest.json自动下载恢复所有包,无需手动逐个安装
Package Manager工具使用
我们可以通过菜单Window -> Package Manager打开包管理器窗口。

- 来源下拉框(Packages: ...):切换当前浏览的包来源。
Unity Registry浏览官方包;In Project查看本工程已安装的包;My Assets浏览从Asset Store购买的资产;Built-in查看引擎内置模块 - 搜索框:按名称搜索包
- 左上角的
+按钮:高级安装入口,支持从Git URL、本地tarball、本地目录、包名(Add package by name)安装
在列表中选中一个包后,右侧详情面板会显示包的介绍、文档链接和可用操作。
- Install:安装当前选中版本的包
- Remove:从工程中移除该包
- 版本切换:详情面板底部的
Version History中,我们可选择其他版本执行升级或降级。升级前建议先看包的Changelog,跨大版本升级可能有API破坏性变更
注意:
- 部分包安装时会要求重启编辑器或修改工程设置,例如安装Input System时会提示“是否启用新输入系统并禁用旧输入系统”,确认后编辑器会自动重启,这是正常现象
- 某些包带有示例内容,详情面板
Samples页签中可点击Import将示例导入到工程的Assets/Samples/下,学习新包时非常有用 - 包之间存在依赖关系,安装一个包可能自动连带安装它依赖的其他包,移除被依赖的包时会收到提示
Scoped Registry作用域注册表
默认情况下Package Manager只从Unity官方注册表拉取包。但社区中一些流行的开源包可能发布在OpenUPM等第三方注册表上,这需要通过Scoped Registry机制接入。打开Edit -> Project Settings -> Package Manager,在Scoped Registries中添加一项注册表配置(通常包括名称、URL、作用域),保存后,Package Manager搜索匹配作用域的包时就会同时查询该注册表了。
UPM其它注意事项
- 包缓存在工程目录的Library中:下载的包会解压到
Library/PackageCache/,这是缓存而非源文件,不要手动修改其中内容,想修改某个包的源码,应把它复制到Packages/目录下转为Embedded包 - 锁定依赖版本:正式项目中建议固定每个包的版本号,不要随意升级到最新版,避免引入未评估过的变更,升级包这种操作应单独提交,便于出问题后回退定位
- 离线环境:包的下载依赖网络,且缓存在用户目录全局共享(
%LOCALAPPDATA%\Unity\cache),同一版本重复安装不会重复下载
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。