見出し画像

【Unity】Package Managerに自作パッケージを追加する

2019年版の記事を書きました(2020/1/9)

この記事は、 Unity Advent Calendar 2018 の25日目の記事になります。


先日、Unity2018.3が正式リリースされパッケージマネージャーのアップデートがありました。

ユーザーが自身でカスタムビルドしたパッケージを手動で追加することができる UX ビルディングブロック群を初めて導入しました。

自作パッケージきたーー!!!!!

UX ビルディングブロック群?
ちょっと翻訳あれげですが基礎部分ができましたってことみたいです。

ずっと待っていた機能だったのでどんなものか調べてみました。

現状をまとめるとこんな感じでした。

■できること
・gitリポジトリとして公開しているパッケージをプロジェクトに登録
・登録したパッケージの自動ダウンロード

■(まだ)できないこと
・GUIでの操作
・パッケージ間の依存関係解決
・プライベートリポジトリ対応

またローカルPC上にある自作パッケージはUnity公式パッケージと同じレベルで動作する模様


というわけで以下、現状のパッケージマネージャーで自作パッケージに対応する方法を詳しく解説をしていきたいと思います。


プロジェクトにgitのパッケージを追加する


まずはパッケージを使う方です。

[ルートフォルダ]/Packages/manifest.json

を直接編集します。

{
  "dependencies": {
    "com.unity.ads": "2.3.1",
~略~
    "com.unity.modules.xr": "1.0.0",
    "ga.fuquna.upmtestpackage": "https://github.com/fuqunaga/UPMTestPackage.git"
  }
}

dependencies

"パッケージ名": "gitリポジトリのURL"

と記述します。Unity公式パッケージではバージョンを記述するところでURLを指定する感じです。

Unity公式のパッケージと同じで、manifest.json更新時やUnity起動時に自動的にダウンロードされます。
*gitコマンドにパスが通ってる必要があります。

リビジョン

https://repository/path.git#revision

このようにURLのあと#revisionで特定のコミットやブランチを指定することができます。リビジョンにはコミットハッシュ、タグ名、ブランチ名が使えます。

パッケージのキャッシュ

[プロジェクトフォルダ]\Library\PackageCache\[パッケージ名@コミットハッシュ]

ダウンロードしたパッケージはPC全体でキャッシュされるわけではなくプロジェクトごとに保存されます。いざとなったらプロジェクト独自の書き換えができる邪悪な誘惑がありますね。

アップデート

gitリポジトリが更新されても一度取り込んだパッケージは更新されません。現状ではmanifest.jsonを開いて

・リビジョンで明示的に指定する
・ダウンロード時に追記されているlock:項目を消す

のどちらかをすることで更新できます。

おそらくGUI対応されればUnity公式パッケージと同じようにGUI上でバージョン指定できるようになると思います。


プロジェクトにローカルPC上のパッケージを追加する

gitに比べて完成してる感があり、GUIが対応してます。

Window→PackageManager でパッケージマネージャーを開いて、下部の+ボタンからディスク上のパッケージを追加できます。

画像1

こちらはパッケージのコピーが行われず指定したフォルダを参照しつづけるようです。



自作パッケージの作成

次は自作パッケージ作る側を見ていきます。

やり方は簡単で

パッケージとして公開するルートフォルダにpackage.jsonを置く

package.jsonの書式はこんな感じです。

{
    "name": "ga.fuquna.upmtestpackage",
    "displayName": "Package Manager Test",
    "version": "1.0.1",
    "unity": "2018.3",
    "description": "This package is\nfor testing package manager.",
    "keywords": ["Test"],
    "category": "Test",
    "dependencies": {
    }
}

公式ページに詳しくのっています

dependenciesで依存する別パッケージを指定できますが、まだgitリポジトリを指定するとエラーになってしまいました。これが通ればパッケージ間の依存関係もいけそうなのですがもう少し待つ必要があるようです。


画像2

上記パッケージを取り込んだプロジェクトの画面です。displayNamedescriptionが反映されているのがわかります。
View documentationなどのリンクが自動的に貼られていますが公式パッケージ前提の挙動のようで無効なURLでした。

Assembly Define Filesの追加

スクリプトを含むパッケージを作って取り込んだところ「Assetsフォルダの外にあるからコンパイルできないぜ」みたいなエラーが出ました。

どうも.asmdefファイルが必要なようです。たしかに取り込んだ側に毎回コンパイルさせるよりは別アセンブリにわけておいたほうが良さそうです。

というわけで自作パッケージは

パッケージとして公開するルートフォルダに次の2ファイルを置く
・ package.json
・ [パッケージ名].asmdef

と認識しておくと良いかもしれません。

Assembly Define Filesについてはテラシュールブログさんの説明がわかりやすいです。


自作パッケージ開発時のフォルダ構成

さて自作パッケージをPackageManagerに対応するぞと思ったときに少し困ったことがありました。

PackageManagerがpackage.jsonを検索するのはgitのルートフォルダだけなのでフォルダ構成をどうすればいいのかわからなくなりました。

開発者としてはAssetsフォルダごと一括でgitに突っ込みたいのですがパッケージとして公開するにはその中のフォルダをルートにする必要があります。

「開発用と公開用のリポジトリを分ける」なども考えたのですが更新に手間がかかるのがネックでした(CIとかちゃんと回すようなしっかりしたパッケージならこの方法が良い気がします)。

結局「そういえばローカルパッケージはマネージャーで追加しても参照してるな」と思い、

・gitリポジトリはパッケージフォルダのみを管理
・開発環境はgit管理せず空のプロジェクトでローカルのパッケージフォルダを登録

というのがいいかなと思っています。テストシーンなどはできるだけパッケージフォルダに入れてそれ以外はできるだけ空のままでいくスタイルです。

ちなみにルート以外のより深い場所にあるフォルダをパッケージとするサブフォルダ対応は要望が強そうでフォーラムで結構声が上がっています。そのうち対応されるかもしれません。


まとめ

Unity2018.3でついにパッケージマネージャーが自作パッケージに対応したということで調べてみました。git対応は現状はほんとに一番根っこの部分が動いたという印象です。

リリースノートでも

Package Manager: Added experimental support for Git package dependencies.

と言われておりまだ今後変わる可能性もありそうです。フォーラムによると2019.1をターゲットにしているようです。

とはいえ、いままでは特に公式な手段のなかったパッケージ管理がgit対応しつつあり、現状でもとりあえず動くというところまで来てるのであとは時間の問題かなと思います。

自作パッケージの未来は明るい!



ちなみにぜんぜん関係ないですが、PowerShell Advent Calendar 2018にも参加しています。よかったら御覧ください。
https://note.mu/fuqunaga/n/n8cff69723267


参考


宣伝

AssetStoreでGUIRemoteというOnGUIを外出しできるアセットを販売しています。

PC上のOnGUI(というかIMGUI)を別PCやMac、iPhone(ここまで動作確認済み)などUnityが対応しているプラットフォーム全てに移すことができます。

現在version1.1が審査中で近々アップデートされるかと思います。
→ アップデートされました!


宣伝2

Unity Advent Calendar 2018 18日目のkaiware007さんも執筆に参加されているUnity Graphis Programming vol.1〜3stores.jpで販売されています。

私はこんな記事を書いています。

よかったらどうぞ!




もしお役に立ちましたらスキ(♡マーク)をお願いします!!! noteアカウントがなくても大丈夫です。サポートもお待ちしています!