やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

UPMパッケージをunitypackage形式で配布する

Unityのエディタ拡張などは Unity Package Manager (UPM) で配布するのが便利です。 UPMのメリットとしては以下の点が挙げられます。

  • バージョン管理、アップデートが容易
  • 依存関係を設定できるため、依存先もUPMであれば同梱・再配布を回避できる
  • Assetsディレクトリ下を汚さない

しかし、Unity 2019.2より前のバージョンではPackage ManagerウィンドウでGit URLが指定できなかったり、scopedRegistriesの指定のために Packages/manifest.json ファイルを直接編集しなければならず、手軽に使ってもらうにはややハードルがあります。

また、VRChatユーザへの露出を考えると BOOTH からダウンロードできる形式での配布にはメリットがありそうです。

折衷案を探っていたところ、UPMパッケージをインポートしてくれるunitypackage形式のインストーラを生成してくれるサービスを見つけたので紹介します。

glitch-package-installer

前提として、配布するUPMパッケージは OpenUPM などどこかしらのレジストリに登録されている必要があります(Git URLではできません)。

インストーラの生成は、下記のようにAPIを実行します。

$ curl -o installer.unitypackage https://package-installer.glitch.me/v1/installer/OpenUPM/com.nowsprinting.blender-like-sceneview-hotkeys?registry=https%3A%2F%2Fpackage.openupm.com

すると、installer.unitypackageというファイルが生成されます。 このファイルをUnityエディタにインポートすると、OpenUPMから com.nowsprinting.blender-like-sceneview-hotkeys の最新バージョンがインポートされます。

なお、installer.unitypackageの中身は独自のインストーラであり、実際はこのインストーラが働いて Packages/manifest.json を編集したのち、インストーラ自身を削除するという振る舞いをしています。

f:id:nowsprinting:20210106090552p:plain:w400

UPMパッケージ自体のインポートは Packages/manifest.json に従ってUPMが行なうため、以降のアップデートは Package Manager ウィンドウで行なえます。

ちなみに、レジストリにOpenUPMを使っている場合、ページ右上にある "Get installer.unitypackage" ボタンでダウンロードできるものはこれと同じものです*1

APIの詳しい使い方はWebサイトを参照してください。

package-installer.glitch.me

ソースコードも公開されています。

github.com

補足

APIのサイトには、バージョン指定、スコープ指定の方法が書いてありますが、試したところ指定は反映されず、常にバージョンもスコープも指定なしのインストーラが生成されました*2

また、

should work fine from 2019.1 to 2020.2+.

とありますが、 Unity 2018.4.20f1 へのインストールができることは確認しています。

(1/7追記) 上記の通り、生成されるunitypackageにはUPMパッケージ本体のコードは含まれません。従ってコードのバックアップとしては用をなさないのでご注意ください。

*1:ダウンロードされるファイル名にはパッケージのバージョン番号がついていますが、常に最新版がインストールされます

*2:時間があるときにちゃんとコード読みたい…