はじめに
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
{
"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にコメントされていたものです。
{
"dependencies": {
"com.svermeulen.extenject": "https://github.com/starikcetin/Extenject.git#9.1.0",
...
}
}
Unofficial Unity Package Manager Registryを利用
もんりぃ先生(@monry)が建てたUnofficial Unity Package Manager Registryにもパッケージが登録されているのでこちらを利用する事もできます。
詳細は以下のリンクをご覧下さい。
- Unofficial Unity Package Manager Registry を建ててみました
- パッケージを利用する
- 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",
...
}
}
更にExtenjectのバージョンの枝番に-5
、scopes
にdev.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",
...
}
}
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",
...
}
}
まだpackage.json
が追加された後にタグが作られてませんが以下のようにハッシュを直接指定すると固定できます。
{
"dependencies": {
"com.svermeulen.extenject": "https://github.com/svermeulen/Extenject.git?path=/UnityProject/Assets/Plugins/Zenject#a955dd60be11d9a1f92080cda1d87e425c519072",
...
}
}
Unity 2019.3.4f1 から Unity Package Manager が「Git リポジトリのルート以外に package.json がある場合」もサポートしてくれるようになりました。https://t.co/gChvsXmgjb
— もんりぃ先生 (@monry) March 6, 2020
こんな感じに `?path=...` とパスを指定してあげれば良いようです。
(内部的に clone してから当該パス以下を読んでる?)
最後に
どちらの方法も一次配布元ではないのでいつまで追従するのか不安があります。
また、Unofficial Unity Package Manager Registryのパッケージはそれに加えて一旦ダウンロードしないと内容が分からないので差分が分からないのと誰がアップロードしたのか分からない不安さがあります。
この辺りを踏まえて便利に利用しましょう。