不同目录对比
- Packages(UPM)
- 用于存放Unity的自定义包(如UPM包),这些包通常是由开发者或团队创建的,并且可以在多个项目中共享和重用。通过manifest.json文件和packages-lock.json文件来管理项目中使用的包
- Assets/Packages
- Packages下的代码有编译缓存,因此修改代码并不会正确Reload,但Assets/Packages目录下的代码可以正常编译。开发者开发包的时候在此目录下工作,之后通过包分发方式让其他项目下载包到Packages下
- AssetsPlugins
- 当 Unity 编译脚本时,会按照以下优先级顺序进行: Plugins 文件夹(包括子目录)。 Standard Assets 文件夹(包括子目录)。 其他** **Assets 文件夹下的脚本。这就意味着Plugins 文件夹中的代码会在其他代码之前编译。而且编译独立于项目的其他代码,将很少修改源码的第三方库放到这个目录下能减少编译时间。如果需要频繁改动的代码,建议单独建立一个Assets/3rdPart来存放
延申
开发个人包(嵌套包/Embedded Package)
1
2
3
4
5
6
7
| Unity Packages目录结构
Packages
├── manifest.json // 列出所有依赖的包
├── packages-lock.json // 锁定包版本
├── com.unity.textmeshpro // 官方包(只读)
├── com.thirdparty.tool // 第三方包(只读)
├── com.mycompany.tool // 嵌套包(可编辑)
|
1
2
3
4
5
6
7
8
| 个人包目录结构
Packages/
├── com.mycompany.mytool/
│ ├── package.json // 包的描述文件
│ ├── Editor/ // 编辑器代码
│ ├── Runtime/ // 运行时代码
│ └── README.md // 说明文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
| package.json示例
{
"name": "com.mycompany.mytool",
"version": "1.0.0",
"displayName": "My Custom Tool",
"description": "A custom tool for Unity",
"unity": "2021.3",
"author": {
"name": "MyCompany",
"email": "support@mycompany.com"
}
}
|
注意:在开发时,包与包之间的依赖关系是有UPM(Unity Package Manager)处理,会自动写入到Packages/package-lock.json中
UPM包和UnityPackage包的区别
特性 | UPM包 | Unitypackage包 |
依赖管理 | 支持依赖管理,能指定和加载其他包 | 不支持,需手动管理 |
版本管理 | 支持版本控制,可回滚和升级 | 不支持版本控制 |
分发方式 | 可通过Git、私有注册表或Unity Registry分发 | 通过文件手动分发或Asset Store分发 |
适用场景 | 模块化开发、团队协作、插件开发、公共包发布 | 小型资源共享、Asset Store内容 |
开发体验 | 支持模块化结构,适合长期维护 | 易于创建和导入,但不适合长期维护 |
动态加载 | 包不会直接拷贝到Assets,只加载需要的部分 | 资源直接拷贝到Assets,增加项目体积 |