DEV Community

KOGA Mitsuhiro
KOGA Mitsuhiro

Posted on • Originally published at qiita.com

Extenject / UniRx / UniTaskをPackage Managerで扱いたい

はじめに

Package Managerでパッケージの導入が楽になったのでよく使うライブラリでも使えないかと調べた所、各リポジトリにissueは立っているものの開発元はまだ対応していません。

ですが有志がUPM対応したりレジストリを建てたりしているのでそれを利用する方法をまとめました。

有志がUPM化したものを利用

ExtenjectとUniRxはissueにもコメントされていたものです。UniTaskはUPMに対応するPull Requestのリポジトリを利用できそうです。

{
  "dependencies": {
    "com.svermeulen.extenject": "https://github.com/starikcetin/Extenject.git#9.1.0",
    "com.neuecc.unirx": "https://github.com/starikcetin/UniRx.git#7.1.0",
    "com.cysharp.unitask": "https://github.com/twksos/UniTask.git#upm-1.2.0",
    ...
  }
}
Enter fullscreen mode Exit fullscreen mode

Unofficial Unity Package Manager Registryを利用

もんりぃ先生(@monry)が建てたUnofficial Unity Package Manager Registryにもパッケージが登録されているのでこちらを利用する事もできます。
詳細は以下のリンクをご覧下さい。

こっちはパッケージを利用する方法に従ってmanifest.jsonに以下の内容を追加します。

{
  "scopedRegistries": [
    {
      "name": "Unofficial Unity Package Manager Registry",
      "url": "https://upm-packages.dev",
      "scopes": [
        "com.stevevermeulen",
        "jp.cysharp"
      ]
    }
  ],
  "dependencies": {
      "com.stevevermeulen.extenject": "9.1.0",
      "jp.cysharp.unirx": "7.1.0",
      "jp.cysharp.unitask": "1.0.0",
      ...
  }
}
Enter fullscreen mode Exit fullscreen mode

更にExtenjectのバージョンの枝番に-5scopesdev.upm-packagesを追加するとテスト用のMoqとNSubstituteを一緒にインストールできます。

{
  "scopedRegistries": [
    {
      "name": "Unofficial Unity Package Manager Registry",
      "url": "https://upm-packages.dev",
      "scopes": [
        "com.stevevermeulen",
        "jp.cysharp",
        "dev.upm-packages"
      ]
    }
  ],
  "dependencies": {
      "com.stevevermeulen.extenject": "9.1.0-5",
      "jp.cysharp.unirx": "7.1.0",
      "jp.cysharp.unitask": "1.0.0",
      ...
  }
}
Enter fullscreen mode Exit fullscreen mode

Path query parameter (Subfolder)

Unity2020.1a21とUnity2019.3.4f1からpackage.jsonをサブフォルダに配置できるようになりました。既存構成のままupm化できるようになったので開発元に追加されれば利用できるようになります。

現状、Extenjectは以下のように指定すればPackage Managerから扱えますがバグがありコンパイルエラーになります。

{
  "dependencies": {
    "com.svermeulen.extenject": "https://github.com/svermeulen/Extenject.git?path=/UnityProject/Assets/Plugins/Zenject",
    ...
  }
}
Enter fullscreen mode Exit fullscreen mode

まだpackage.jsonが追加された後にタグが作られてませんが以下のようにハッシュを直接指定すると固定できます。

{
  "dependencies": {
    "com.svermeulen.extenject": "https://github.com/svermeulen/Extenject.git?path=/UnityProject/Assets/Plugins/Zenject#a955dd60be11d9a1f92080cda1d87e425c519072",
    ...
  }
}
Enter fullscreen mode Exit fullscreen mode

https://forum.unity.com/threads/some-feedback-on-package-manager-git-support.743345/#post-5425311

Unity 2019.3.4f1 から Unity Package Manager が「Git リポジトリのルート以外に package.json がある場合」もサポートしてくれるようになりました。https://t.co/gChvsXmgjb
こんな感じに ?path=... とパスを指定してあげれば良いようです。
(内部的に clone してから当該パス以下を読んでる?)

— もんりぃ先生 (@monry) March 6, 2020

image.png

最後に

どちらの方法も一次配布元ではないのでいつまで追従するのか不安があります。
また、Unofficial Unity Package Manager Registryのパッケージはそれに加えて一旦ダウンロードしないと内容が分からないので差分が分からないのと誰がアップロードしたのか分からない不安さがあります。
この辺りを踏まえて便利に利用しましょう。

Top comments (0)