unity2018之后使用了全新的package 管理工具。下图是全新package和以前的package的不同点(摘自https://blogs.unity3d.com/2018/05/09/unity-packages-life-cycle/)。
Asset Store Package | New Package | |
File | .unitypackage | Git repo or .tgz |
Location | Imported to Asset Folder | Referenced (or embedded) via Packages folder |
Dependencies | Manual | Explicit and calculable |
Removal | Manual / Difficult | Remove Reference or delete embedded directory |
Updatable | Error prone / Difficult | Easy |
Forkable | Manual | Easy, source available (when feasible) |
Full Projects | Difficult to install | Templates from New Project dialog |
接下来介绍一下新版package中如何去管理自己的一些package。
Packages里面都可以包含些什么呢?
- C# 脚本
- Assemblies(dll)
- Native plugins(so,jar,aar...)
- 模型、贴图、动画文件...
每个包里面需要包含package manifest文件,这个文件里面包含了package的基本信息。下面是一个样例:
{
"name": "com.unity.example",
"version": "1.2.3",
"displayName": "Package Example",
"description": "This is an example package",
"unity": "2019.1",
"unityRelease": "0b5",
"dependencies": {
"com.unity.some-package": "1.0.0",
"com.unity.other-package": "2.0.0"
},
"keywords": [
"keyword1",
"keyword2",
"keyword3"
],
"author": {
"name": "Unity",
"email": "[email protected]",
"url": "https://www.unity3d.com"
}
}
而每个包里面的目录结构也是固定的:
<root>
├── package.json
├── README.md
├── CHANGELOG.md
├── LICENSE.md
├── Editor
│ ├── Unity.[YourPackageName].Editor.asmdef
│ └── EditorExample.cs
├── Runtime
│ ├── Unity.[YourPackageName].asmdef
│ └── RuntimeExample.cs
├── Tests
│ ├── Editor
│ │ ├── Unity.[YourPackageName].Editor.Tests.asmdef
│ │ └── EditorExampleTest.cs
│ └── Runtime
│ ├── Unity.[YourPackageName].Tests.asmdef
│ └── RuntimeExampleTest.cs
└── Documentation~
└── [YourPackageName].md
package如何被使用
我们引用自定义的package有两种方式,一种是嵌入式的,一种是local的。
嵌入式
所谓嵌入式的就是直接将package放入到工程目录中的packages目录。
local
我们重点说一个local package。unity工程目录中packages目录里面有一个manifest.json文件,这个文件是用来管理package依赖的有点像maven或者是npm。具体的格式请参见https://docs.unity3d.com/Manual/upm-manifestPrj.html
{
"scopedRegistries": [
{
"name": "Main",
"url": "http://localhost:8081/repository/unity/",
"scopes": [
"com.xxx.unity"
]
}
],
"dependencies": {
"com.unity.ads": "2.3.1",
"com.xxx.unity.tools": "1.0.0"
}
}
里面的scopedRegistries是用来注册我们自己的package的,unity自己有一个官方的registry。上面的例子中我是使用的npm管理工具去管理的自己的package(后面我再详细介绍npm包管理工具)。通过上面的步骤我们就可以管理和下载自己的package啦。
总结一下:
- 创建unity package。我们只要按照上面说的目录结构创建自己的目录就可以的,需要注意的就是如果里面包含了c#代码,我们一定要使用unity中的asmdef去管理我们的代码,否则代码是不被编译的。
- 上传到npm
- 配置manifest文件