说起第三方软件的管理,iOS平台有Cocoapods,Andriod有Gradle,Unity开发者直到Unity2018才有了Packages Manager!
在介绍这个工具之前,我们先来看另外一个资源共享的工具: .unitypackage 文件;
.unitypackage
在两个不同的项目之间公用一个Scene,资源,或者代码,如果不考虑版本更新,那么这种方式是最快捷的;
我们可以对预设体,Scene,甚至是文件夹,使用 Export Package 导出为一个 .unitypackage 文件,然后在另外的项目使用 Import Package 命令,导入这部分资源;
Package Manager创建本地包
先了解两个文件,这是包管理的核心:
-
package.json
这个文件是所有自定义包都要有的,来标识包的名字和信息,也可以在 Package Manager的UI面板中选中该包查看到这些信息;
关于这个文件的配置,可以参考这里:
package.json的信息配置
下面是一个示例:
{
"name": "com.calabash.net",
"displayName": "CANet",
"version": "1.0.0",
"description": "a test custom package",
"author": "calabash",
"license": "MIT",
"unity": "2018.3",
"keywords": [
"calabash",
"calabash-net"
]
}
-
manifest.json 项目需要的包文件列表都在这里,类似于podfile,字段的含义请查阅这里:
manifest.json的配置
当要引入工程外部的包时(非Embeded包,包括Git,https,本地其他位置的包),都需要在这里配置引入包的名称和地址;
本地包根据创建位置有两种方式:
1.Embeded Package
首先我们要创建一个Unity工程
-
在工程文件的Packages文件夹下创建要开发的包
在包的根目录下创建 package.json 文件
填写 package.json 的信息
Embeded package不需要修改项目的 manifest.json 文件
回到Unity,项目的 Packages 文件夹下已经有了自定义的包;
2.Local Package
如果本地有多个项目,有一些公用的资源和代码,那么可以把该包放在电脑的某个位置,其他项目的 manifest.json 引用就可以了;鉴于创建包的时候需要Unity的工程项目,我们首先在Unity项目中开发包,然后把文件夹拖出放到指定的存储位置;
- 新建一个空工程,在Assets文件夹下创建包的文件夹
- 在包的根目录创建 package.json 文件
- 按照规定的目录结构(见下面说明)创建包内容
- 把创建好的包文件夹拖到指定存储位置
- 在需要用到的工程的 manifest.json 配置引用地址即可
通过上面两种创建方式,我们都可以创建本地包,Unity规定了自定义包的文件结构:
有些并不是必须要配置的,各个目录的含义如下:
Package layout
package.json是必须的;一般情况下使用Runtime文件夹就可以了;
在这个目录结构中,大家可以看到一些 .asmdef 文件,称之为 程序集文件,这些文件是可以在Unity中直接创建的,如果没有这些文件,在包里写的C#文件并不会被编译,关于程序集文件,这里不多赘述,更多资料可以查阅这里:
程序集文件的使用
如果创建了 Tests 文件夹, 在其子目录中创建的程序集文件需要依赖 Runtime 中的程序集,可以查看这里:程序集的依赖
一般来讲,在Unity规定的位置创建一个就可以了;
Package Manager创建Git包
从Unity2018.3开始,UPM(Unity Package Manager)就已经支持Git啦,喜大普奔.
Unity支持Git
网络包的创建思路是这样:
- 因为自定义包的开发要在Unity环境下,因此需要一个开发分支来管理一个Unity工程
- 发布的包不应该包含除包以外的其他Unity工程资源,因此需要一个子分支来管理
- 开发思路就很明确了,两个分支,一般用master分支来开发,然后使用
git subtree split --prefix=Assets/PackageName --branch upm
命令,发布到upm分支,其他人使用该分支下载你开发的包;
- 开发完成后给upm包打上一个tag:
git tag 1.0.0 upm
git push origin upm --tags
- 这样其他人在自己工程的 manifest.json 就可以按照如下格式配置
这个 # 后面可以跟分支名称,tag号,或者commit的HashCode;
关于GitUrl配置的更多信息,请查阅:
Unity中GitUrl的配置
"dependencies": {
"com.xxxx.packagename": "https://username@xxxxx.git#1.0.0",
}
- 回到Unity项目中,该Git地址的包就会下载下来了
- 自定义包的更新也是按照这个流程,更新代码后,一定记得修改 package.json 文件;
如果不想手动去修改 manifest.json 文件,有一个很好用的开源工具UpmGitExtension,在项目中首先导入这个包,然后使用这个界面工具来下载其他的Git上的包即可:
Package Manager创建npm服务器包
后续更新...
参考文章:
开发Unity Package插件包