一起成为偷库大盗吧,Unity Packages的使用略谈

前言
相信很多Unity用户,老早发现Unity的不少官方插件从AssetStore迁移到Packages了。而且大部分新功能都是在Package Manager启用即可,相当方便(不过有网络问题的话,那就相当烦人)。虽然我原本是想丢一个文档超连接,就可以完事了,但是会错过欢乐的吹水时间。由于现在Unity中国正在肝文档翻译,应该不久将来会见到对应的官方中文文档。官方英文文档连接如下:
https://docs.unity3d.com/Manual/Packages.html
原本是先想写InputSystem的教程,但想想Unity大部分新功能都是由Packages管理的,所以有了这篇文章。由于自己不是很喜欢翻译文档,所以大部分还是按照自己的思路和经验来讲解。

Packages支持的存放类型
1.Packages文件夹
在$(UnityProject)\Packages\中,除了存放Packages的清单设置文件manifest.json,也可以存放Package。用法也很简单,直接把Package(包)拷贝到此目录,Unity会自动加载。
其实manifest.json已经保存了Packages所有引用关系,只不过官方觉得文本编辑对小白不友好,所以整了个UI界面,也就是Package Manager。关于manifest.json的编辑,还是乖乖查阅文档,这里就不做过多阐述。
2.官方Package
Unity的Package Manager界面,是先从官方服务器获取列表,然后再加载Package(包)信息。所以当你网络不好时候,会出现死亡转圈。大部分小白到了这一步,就会喊Unity辣鸡。但是相信Unity中国在不久的将来会改善这些网络问题。

对于Package Manager的使用,还是多看看官方文档吧。
而Packages在网络引用的Package(包),都是缓存在$(UnityProject)\Library\PackageCache\这个文件夹下的。这个文件夹作用和$(UnityProject)\Packages差不多,但是放在Library文件夹的都是存放缓存文件,所以你会发现这里的Package默认是只读的。就算是你修改了这些文件,下次打开Unity项目,Unity会热情地帮你更新到服务器的版本。
下次再遇到Package Manager的死亡转圈的时候,请自己手动修改manifest.json文件,或者把其他项目的PackageCache下的Package(包)拷贝到本项目的Packages。不要再喊Unity辣鸡了,是你用Unity像蔡徐坤。
3.本地文件
在死亡转圈旁边,你会发现有个加号,点下去会出现一个“从磁盘添加Package”。接着选择一个Package(包)的文件夹,完事。

4.第三方Git库
这个功能除了文本编辑manifest.json,还可以借助第三方插件实现。请访问这个Github库(需要Unity 2018.3和以上的版本)
https://github.com/mob-sakai/UpmGitExtension
安装也很简单,按照下面文本修改manifest.json:
{
"dependencies": {
"com.coffee.upm-git-extension": "https://github.com/mob-sakai/UpmGitExtension.git#0.8.1",
...
},
}
然后Package Manager成了满血版,从此可以到处偷库。



怎样建立自己的Package(包)
上面已经了解Packages支持类型,怎么管理Package(包),请按照自己的项目需求决定。其实除了引用强大的第三库外,自己也有功能复用的需求,那么让我们开始创建自己的Package(轮子)。这边为了方便讲解,我把$(UnityProject)\Packages作为测试文件夹。
1.建立Package文件夹
在$(UnityProject)\Packages\文件夹下,新建一个文件夹,名字你自己定。这边我起名为MyPackage。

打开MyPackage文件夹,新建一个package.json文件。你可选择性新建下面文件夹:
Documentation~:文档
Editor:编辑器代码和资源
Runtime:运行时代码和资源
Tests:单元测试

之后请使用Assembly Definition文件进行管理不同Package(包)的代码依赖关系。
2.编辑package.json文件
这部分,照着文档的说明改就行了。其实就是描述本Package(包)的信息,和库的依赖关系。这边我瞎填一下信息:


3.找一个地方托管你的Package(包)
到了这一步,你可以把MyPackage从你的项目挪走。在本地磁盘维护+文件方式添加Package(包),或是Git托管+URL方式添加Package(包),还是根据你的项目需求决定。至于Git和Github等使用方法,还是自己去百度或是谷歌搜索。

Packages的优点和缺点
由于快是一个翻不动的咸鱼,所以也懒得去吐槽奇葩的工作遭遇。
优点
高度制定化你的Unity功能,哪个功(zi)能(shi)随你挑;
让你的项目目录更加清爽,一堆插件也不用放在Assets文件夹了,也减少第三方库的提交;
方便项目管理,一打开Unity就帮你加载所有的Package(包),也不怕自己的第三方库和同事有差异了;
缺点
小白认为的缺点:
网络问题,Package Manager更新不了最新信息,死亡转圈;
我这类吃螃蟹的人认为的缺点:
Package(包)依赖关系要谨慎处理,比如Unity 2019.2把UGUI挪到Packages,初期一大堆库GG;
Package(包)版本问题,有时候Unity主版本和Package(包)的API有差异,就只能等下个版本了;
最后
这些技巧熟悉后,你可以到处去偷库了。有错误和遗漏的地方,可以下面评论指出。我,偷库大盗,莫得感情,也莫得Git。