Unity2018 Packages + npm 自定義包管理大揭祕!
簡介
Unity2018新增的功能 “包管理器”,相信很多文章都已經轉載介紹過了。但是怎麼看,裡面就是一堆原本在AssetStore裡的官方工具包。難道官方為了照顧中國開發者的網路,特地做個簡化的AssetStore面板嗎?仔細調研了一番,發現這其實是一個“巨大巨大超級超級給力的更新”。眾所周知,用 node、python 等進行開發,就免不了 brew, npm, pip 一下。這些語言崛起的非常關鍵的一個原因,就是包的生產和維護。unity也要這樣,使專案和模組分離,單獨維護。
本文就不在贅述菜單面板和那些官方資源了,直接從如何通過修改配置檔案,引入自定義本地包和遠端包使用流程兩方面介紹。提及一些官方文件暫未公佈的功能,及實際使用時注意的地方。
引用本地包
- 建立一個空專案,啟動。
Project面板預設已經包含著這些包。
\Packages\manifest.json 中有更多。
- 在Assets中新建一個我們自己的包,如
com.setsuodu.mynpm
。
再新增一個指令碼檔案,NPM.cs。
namespace SetsuOdu
{
public static class NPM
{
public const string myblog = "https://blog.csdn.net/mseol";
}
}
新增一個 package.json 備用。
{
"name" : "com.setsuodu.mynpm",
"version": "0.1.0",
"description": "a test npm package",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "setsuodu",
"license": "MIT",
"keywords": [
"unity3d",
"unity3d-npm"
]
}
- 讓以上建立的檔案在unity中自動編譯一下,生成 .meta 檔案。完成後把整個包剪下到專案根目錄。如圖:
- 編輯
\Packages\manifest.json
,修改後如下:
{
"dependencies": {
"com.unity.ads": "2.0.8",
"com.setsuodu.mynpm": "file:../com.setsuodu.mynpm"
}
}
- 切換回unity,經過一個讀條,包已引入。
引用遠端包
完成上一步以後,可以理解包的引用是在 dependencies{}
中按照 "包名": "路徑"
的格式設定的。那麼可以把路徑 file:/
改成 http://
,引用自己上傳到網路上的資源嗎?
答案是肯定的,但是有所限制。對 manifest.json
做以下修改。
{
"dependencies": {
"com.unity.ads": "2.0.8",
"com.setsuodu.mynpm": "0.1.0"
},
"registry": "http://"
}
- 安裝nodejs(已安裝則跳過)
- 安裝verdaccio
$ npm install -g verdaccio
完成後找到目錄 C:\Users\Administrator\AppData\Roaming\verdaccio\storage
,把自己的包放到該目錄下。
$ npm login
> Logged in as setsuodu on http://localhost:4873/.
- 啟動verdaccio
$ verdaccio
> warn ...
> ... http://localhost:4873/ - verdaccio/3.8.2
- 釋出自己的包
// cd到包目錄
$ cd C:\Users\Administrator\AppData\Roaming\verdaccio\storage\com.setsuodu.mynpm
$ npm publish
釋出成功後到官網賬戶下,檢視 Packages。如圖,已經可以使用 $ npm i com.setsuodu.mynpm
遠端下載自己的包了。
- 在unity中引用外網的包。再次編輯
\Packages\manifest.json
,修改後如下:
{
"dependencies": {
"com.unity.ads": "2.0.8",
"com.setsuodu.mynpm": "0.1.3"
},
"registry": "https://registry.npmjs.org"
}
切換回Unity,經過短暫下載和編譯,就可以使用了。
using UnityEngine;
using SetsuOdu;
public class HowToUse : MonoBehaviour
{
void Start()
{
Debug.Log(NPM.myblog);
}
}
呼叫com.setsuodu.mynpm包中的方法,列印成功。