一起成為偷庫(kù)大盜吧,Unity Packages的使用略談

前言
????相信很多Unity用戶(hù),老早發(fā)現(xiàn)Unity的不少官方插件從AssetStore遷移到Packages了。而且大部分新功能都是在Package Manager啟用即可,相當(dāng)方便(不過(guò)有網(wǎng)絡(luò)問(wèn)題的話,那就相當(dāng)煩人)。雖然我原本是想丟一個(gè)文檔超連接,就可以完事了,但是會(huì)錯(cuò)過(guò)歡樂(lè)的吹水時(shí)間。由于現(xiàn)在Unity中國(guó)正在肝文檔翻譯,應(yīng)該不久將來(lái)會(huì)見(jiàn)到對(duì)應(yīng)的官方中文文檔。官方英文文檔連接如下:
? ? https://docs.unity3d.com/Manual/Packages.html
? ? 原本是先想寫(xiě)InputSystem的教程,但想想U(xiǎn)nity大部分新功能都是由Packages管理的,所以有了這篇文章。由于自己不是很喜歡翻譯文檔,所以大部分還是按照自己的思路和經(jīng)驗(yàn)來(lái)講解。

Packages支持的存放類(lèi)型
1.Packages文件夾
????在$(UnityProject)\Packages\中,除了存放Packages的清單設(shè)置文件manifest.json,也可以存放Package。用法也很簡(jiǎn)單,直接把Package(包)拷貝到此目錄,Unity會(huì)自動(dòng)加載。
其實(shí)manifest.json已經(jīng)保存了Packages所有引用關(guān)系,只不過(guò)官方覺(jué)得文本編輯對(duì)小白不友好,所以整了個(gè)UI界面,也就是Package Manager。關(guān)于manifest.json的編輯,還是乖乖查閱文檔,這里就不做過(guò)多闡述。
2.官方Package
????Unity的Package Manager界面,是先從官方服務(wù)器獲取列表,然后再加載Package(包)信息。所以當(dāng)你網(wǎng)絡(luò)不好時(shí)候,會(huì)出現(xiàn)死亡轉(zhuǎn)圈。大部分小白到了這一步,就會(huì)喊Unity辣雞。但是相信Unity中國(guó)在不久的將來(lái)會(huì)改善這些網(wǎng)絡(luò)問(wèn)題。

????對(duì)于Package Manager的使用,還是多看看官方文檔吧。
????而Packages在網(wǎng)絡(luò)引用的Package(包),都是緩存在$(UnityProject)\Library\PackageCache\這個(gè)文件夾下的。這個(gè)文件夾作用和$(UnityProject)\Packages差不多,但是放在Library文件夾的都是存放緩存文件,所以你會(huì)發(fā)現(xiàn)這里的Package默認(rèn)是只讀的。就算是你修改了這些文件,下次打開(kāi)Unity項(xiàng)目,Unity會(huì)熱情地幫你更新到服務(wù)器的版本。
????下次再遇到Package Manager的死亡轉(zhuǎn)圈的時(shí)候,請(qǐng)自己手動(dòng)修改manifest.json文件,或者把其他項(xiàng)目的PackageCache下的Package(包)拷貝到本項(xiàng)目的Packages。不要再喊Unity辣雞了,是你用Unity像蔡徐坤。
3.本地文件
????在死亡轉(zhuǎn)圈旁邊,你會(huì)發(fā)現(xiàn)有個(gè)加號(hào),點(diǎn)下去會(huì)出現(xiàn)一個(gè)“從磁盤(pán)添加Package”。接著選擇一個(gè)Package(包)的文件夾,完事。

4.第三方Git庫(kù)
????這個(gè)功能除了文本編輯manifest.json,還可以借助第三方插件實(shí)現(xiàn)。請(qǐng)?jiān)L問(wèn)這個(gè)Github庫(kù)(需要Unity 2018.3和以上的版本)
https://github.com/mob-sakai/UpmGitExtension
????安裝也很簡(jiǎn)單,按照下面文本修改manifest.json:
{
? "dependencies": {
? ? "com.coffee.upm-git-extension": "https://github.com/mob-sakai/UpmGitExtension.git#0.8.1",
? ? ...
? },
}
????然后Package Manager成了滿(mǎn)血版,從此可以到處偷庫(kù)。



怎樣建立自己的Package(包)
????上面已經(jīng)了解Packages支持類(lèi)型,怎么管理Package(包),請(qǐng)按照自己的項(xiàng)目需求決定。其實(shí)除了引用強(qiáng)大的第三庫(kù)外,自己也有功能復(fù)用的需求,那么讓我們開(kāi)始創(chuàng)建自己的Package(輪子)。這邊為了方便講解,我把$(UnityProject)\Packages作為測(cè)試文件夾。
1.建立Package文件夾
????在$(UnityProject)\Packages\文件夾下,新建一個(gè)文件夾,名字你自己定。這邊我起名為MyPackage。

????打開(kāi)MyPackage文件夾,新建一個(gè)package.json文件。你可選擇性新建下面文件夾:
Documentation~:文檔
Editor:編輯器代碼和資源
Runtime:運(yùn)行時(shí)代碼和資源
Tests:單元測(cè)試

????之后請(qǐng)使用Assembly Definition文件進(jìn)行管理不同Package(包)的代碼依賴(lài)關(guān)系。
2.編輯package.json文件
????這部分,照著文檔的說(shuō)明改就行了。其實(shí)就是描述本Package(包)的信息,和庫(kù)的依賴(lài)關(guān)系。這邊我瞎填一下信息:


3.找一個(gè)地方托管你的Package(包)
????到了這一步,你可以把MyPackage從你的項(xiàng)目挪走。在本地磁盤(pán)維護(hù)+文件方式添加Package(包),或是Git托管+URL方式添加Package(包),還是根據(jù)你的項(xiàng)目需求決定。至于Git和Github等使用方法,還是自己去百度或是谷歌搜索。

Packages的優(yōu)點(diǎn)和缺點(diǎn)
????由于快是一個(gè)翻不動(dòng)的咸魚(yú),所以也懶得去吐槽奇葩的工作遭遇。
優(yōu)點(diǎn)
高度制定化你的Unity功能,哪個(gè)功(zi)能(shi)隨你挑;
讓你的項(xiàng)目目錄更加清爽,一堆插件也不用放在Assets文件夾了,也減少第三方庫(kù)的提交;
方便項(xiàng)目管理,一打開(kāi)Unity就幫你加載所有的Package(包),也不怕自己的第三方庫(kù)和同事有差異了;
缺點(diǎn)
????小白認(rèn)為的缺點(diǎn):
網(wǎng)絡(luò)問(wèn)題,Package Manager更新不了最新信息,死亡轉(zhuǎn)圈;
????我這類(lèi)吃螃蟹的人認(rèn)為的缺點(diǎn):
Package(包)依賴(lài)關(guān)系要謹(jǐn)慎處理,比如Unity 2019.2把UGUI挪到Packages,初期一大堆庫(kù)GG;
Package(包)版本問(wèn)題,有時(shí)候Unity主版本和Package(包)的API有差異,就只能等下個(gè)版本了;
最后
????這些技巧熟悉后,你可以到處去偷庫(kù)了。有錯(cuò)誤和遺漏的地方,可以下面評(píng)論指出。我,偷庫(kù)大盜,莫得感情,也莫得Git。