1. 程式人生 > >Unity2018 Packages + npm 自定義包管理大揭祕!

Unity2018 Packages + npm 自定義包管理大揭祕!

簡介

Unity2018新增的功能 “包管理器”,相信很多文章都已經轉載介紹過了。但是怎麼看,裡面就是一堆原本在AssetStore裡的官方工具包。難道官方為了照顧中國開發者的網路,特地做個簡化的AssetStore面板嗎?仔細調研了一番,發現這其實是一個“巨大巨大超級超級給力的更新”。眾所周知,用 node、python 等進行開發,就免不了 brew, npm, pip 一下。這些語言崛起的非常關鍵的一個原因,就是包的生產和維護。unity也要這樣,使專案和模組分離,單獨維護。

本文就不在贅述菜單面板和那些官方資源了,直接從如何通過修改配置檔案,引入自定義本地包和遠端包使用流程兩方面介紹。提及一些官方文件暫未公佈的功能,及實際使用時注意的地方。

引用本地包

  1. 建立一個空專案,啟動。

Project面板預設已經包含著這些包。 Project

\Packages\manifest.json 中有更多。 manifest

  1. 在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" ] }
  1. 讓以上建立的檔案在unity中自動編譯一下,生成 .meta 檔案。完成後把整個包剪下到專案根目錄。如圖: 剪下
  2. 編輯 \Packages\manifest.json ,修改後如下:
{
  "dependencies": {
    "com.unity.ads": "2.0.8",
    "com.setsuodu.mynpm": "file:../com.setsuodu.mynpm"
  }
}
  1. 切換回unity,經過一個讀條,包已引入。 完成本地引入

引用遠端包

完成上一步以後,可以理解包的引用是在 dependencies{} 中按照 "包名": "路徑" 的格式設定的。那麼可以把路徑 file:/ 改成 http:// ,引用自己上傳到網路上的資源嗎?

答案是肯定的,但是有所限制。對 manifest.json 做以下修改。

{
  "dependencies": {
    "com.unity.ads": "2.0.8",
    "com.setsuodu.mynpm": "0.1.0"
  },
  "registry": "http://"
}
  1. 安裝nodejs(已安裝則跳過)
  2. 安裝verdaccio
$ npm install -g verdaccio

完成後找到目錄 C:\Users\Administrator\AppData\Roaming\verdaccio\storage ,把自己的包放到該目錄下。

$ npm login
> Logged in as setsuodu on http://localhost:4873/.
  1. 啟動verdaccio
$ verdaccio
> warn ...
> ... http://localhost:4873/ - verdaccio/3.8.2
  1. 釋出自己的包
// cd到包目錄
$ cd C:\Users\Administrator\AppData\Roaming\verdaccio\storage\com.setsuodu.mynpm
$ npm publish

釋出成功後到官網賬戶下,檢視 Packages。如圖,已經可以使用 $ npm i com.setsuodu.mynpm 遠端下載自己的包了。 釋出成功

  1. 在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包中的方法,列印成功。 在這裡插入圖片描述

參考文獻