LoginSignup
21
8

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-08

はじめに

Package Managerでパッケージの導入が楽になったのでよく使うライブラリでも使えないかと調べた所、各リポジトリは後述するPath Queryに対応していました。

各リポジトリのUPMのgit URLと対応状況

  • Extenject
    package.jsonとasmdefは用意されていますが正式対応版ではなくサンプルシーンも一緒に取り込まれてしまうので使わない方が無難です。
  • UniRx
    masterブランチのみUPM対応しています。UPM対応後にタグが作られていないのでバージョン指定はできません。
  • UniTask
    masterブランチと1.3.0以降のタグを指定できます。タグを指定する場合は#1.3.0のようにURLの最後に追加します。
    • https://github.com/Cysharp/UniTask.git?path=Assets/UniRx.Async#1.3.0
Packages/manifest.json
{
  "dependencies": {
    "com.svermeulen.extenject": "https://github.com/svermeulen/Extenject.git?path=/UnityProject/Assets/Plugins/Zenject",
    "com.neuecc.unirx": "https://github.com/neuecc/UniRx.git?path=Assets/Plugins/UniRx/Scripts",
    "com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=Assets/UniRx.Async",
    ...
  }
}

UnityのPackage ManagerにPath Queryが追加される前に有志がUPM対応したりレジストリを建てたものもありますのでまとめました。

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

Extenjectはissueにコメントされていたものです。

Packages/manifest.json
{
  "dependencies": {
    "com.svermeulen.extenject": "https://github.com/starikcetin/Extenject.git#9.1.0",
    ...
  }
}

Unofficial Unity Package Manager Registryを利用

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

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

Packages/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",
      ...
  }
}

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

Packages/manifest.json
{
  "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",
      ...
  }
}

Path query parameter (Subfolder)

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

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

Packages/manifest.json
{
  "dependencies": {
    "com.svermeulen.extenject": "https://github.com/svermeulen/Extenject.git?path=/UnityProject/Assets/Plugins/Zenject",
    ...
  }
}

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

Packages/manifest.json
{
  "dependencies": {
    "com.svermeulen.extenject": "https://github.com/svermeulen/Extenject.git?path=/UnityProject/Assets/Plugins/Zenject#a955dd60be11d9a1f92080cda1d87e425c519072",
    ...
  }
}

image.png

最後に

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

21
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
8