說起第三方軟件的管理,iOS平臺有Cocoapods,Andriod有Gradle,Unity開發(fā)者直到Unity2018才有了Packages Manager!
在介紹這個工具之前,我們先來看另外一個資源共享的工具: .unitypackage 文件;
.unitypackage
在兩個不同的項(xiàng)目之間公用一個Scene,資源,或者代碼,如果不考慮版本更新,那么這種方式是最快捷的;
我們可以對預(yù)設(shè)體,Scene,甚至是文件夾,使用 Export Package 導(dǎo)出為一個 .unitypackage 文件,然后在另外的項(xiàng)目使用 Import Package 命令,導(dǎo)入這部分資源;
Package Manager創(chuàng)建本地包
先了解兩個文件,這是包管理的核心:
-
package.json
這個文件是所有自定義包都要有的,來標(biāo)識包的名字和信息,也可以在 Package Manager的UI面板中選中該包查看到這些信息;
關(guān)于這個文件的配置,可以參考這里:
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 項(xiàng)目需要的包文件列表都在這里,類似于podfile,字段的含義請查閱這里:
manifest.json的配置
當(dāng)要引入工程外部的包時(非Embeded包,包括Git,https,本地其他位置的包),都需要在這里配置引入包的名稱和地址;
本地包根據(jù)創(chuàng)建位置有兩種方式:
1.Embeded Package
首先我們要創(chuàng)建一個Unity工程
-
在工程文件的Packages文件夾下創(chuàng)建要開發(fā)的包
在包的根目錄下創(chuàng)建 package.json 文件
填寫 package.json 的信息
Embeded package不需要修改項(xiàng)目的 manifest.json 文件
回到Unity,項(xiàng)目的 Packages 文件夾下已經(jīng)有了自定義的包;
2.Local Package
如果本地有多個項(xiàng)目,有一些公用的資源和代碼,那么可以把該包放在電腦的某個位置,其他項(xiàng)目的 manifest.json 引用就可以了;鑒于創(chuàng)建包的時候需要Unity的工程項(xiàng)目,我們首先在Unity項(xiàng)目中開發(fā)包,然后把文件夾拖出放到指定的存儲位置;
- 新建一個空工程,在Assets文件夾下創(chuàng)建包的文件夾
- 在包的根目錄創(chuàng)建 package.json 文件
- 按照規(guī)定的目錄結(jié)構(gòu)(見下面說明)創(chuàng)建包內(nèi)容
- 把創(chuàng)建好的包文件夾拖到指定存儲位置
- 在需要用到的工程的 manifest.json 配置引用地址即可
通過上面兩種創(chuàng)建方式,我們都可以創(chuàng)建本地包,Unity規(guī)定了自定義包的文件結(jié)構(gòu):
有些并不是必須要配置的,各個目錄的含義如下:
Package layout
package.json是必須的;一般情況下使用Runtime文件夾就可以了;
在這個目錄結(jié)構(gòu)中,大家可以看到一些 .asmdef 文件,稱之為 程序集文件,這些文件是可以在Unity中直接創(chuàng)建的,如果沒有這些文件,在包里寫的C#文件并不會被編譯,關(guān)于程序集文件,這里不多贅述,更多資料可以查閱這里:
程序集文件的使用
如果創(chuàng)建了 Tests 文件夾, 在其子目錄中創(chuàng)建的程序集文件需要依賴 Runtime 中的程序集,可以查看這里:程序集的依賴
一般來講,在Unity規(guī)定的位置創(chuàng)建一個就可以了;
Package Manager創(chuàng)建Git包
從Unity2018.3開始,UPM(Unity Package Manager)就已經(jīng)支持Git啦,喜大普奔.
Unity支持Git
網(wǎng)絡(luò)包的創(chuàng)建思路是這樣:
- 因?yàn)樽远x包的開發(fā)要在Unity環(huán)境下,因此需要一個開發(fā)分支來管理一個Unity工程
- 發(fā)布的包不應(yīng)該包含除包以外的其他Unity工程資源,因此需要一個子分支來管理
- 開發(fā)思路就很明確了,兩個分支,一般用master分支來開發(fā),然后使用
git subtree split --prefix=Assets/PackageName --branch upm
命令,發(fā)布到upm分支,其他人使用該分支下載你開發(fā)的包;
- 開發(fā)完成后給upm包打上一個tag:
git tag 1.0.0 upm
git push origin upm --tags
- 這樣其他人在自己工程的 manifest.json 就可以按照如下格式配置
這個 # 后面可以跟分支名稱,tag號,或者commit的HashCode;
關(guān)于GitUrl配置的更多信息,請查閱:
Unity中GitUrl的配置
"dependencies": {
"com.xxxx.packagename": "https://username@xxxxx.git#1.0.0",
}
- 回到Unity項(xiàng)目中,該Git地址的包就會下載下來了
- 自定義包的更新也是按照這個流程,更新代碼后,一定記得修改 package.json 文件;
如果不想手動去修改 manifest.json 文件,有一個很好用的開源工具UpmGitExtension,在項(xiàng)目中首先導(dǎo)入這個包,然后使用這個界面工具來下載其他的Git上的包即可:
Package Manager創(chuàng)建npm服務(wù)器包
后續(xù)更新...
參考文章:
開發(fā)Unity Package插件包