2019-02-19Unity2018.3あたりからPackageManagerがかなり使いやすくなったので、ライブラリの作り方と公開方法をまとめてみました。PackageManagerって何だという人は以下の参考になるブログ記事を見てください。参考ブログhttp://tsubakit1.hateblo.jp/entry/2018/08/16/221016https://note.mu/fuqunaga/n/ne331cb5600fehttps://synamon.hatenablog.com/entry/2018/05/26/165332はじめにこれまでのPackageManagerはUnity公式以外のサードパーティーがライブラリを作成したり公開するには不便でしたが、以下のアップデートのおかげでかなり実用的になりました。GitHubのURL指定でPackageを導入できる相対パスで指定したフォルダにあるPackageを導入できるProjectViewのPackageフォルダから内容を見る/編集できるこの記事では新しいPackageManagerを使うことで、自作パッケージを簡単に作成して公開する方法を紹介します。Windowを使うことで好きなPackageをインストールできました。このUIで設定すると、Packageフォルダ内にあるmanifest.jsonファイルの内容が変更されます。Unityはこの設定ファイルを見てどのパッケージを利用するかを管理しています。Windowを使わないで手動で書き換えることができます。[GitHubのURL],のような形で追記することで、GitHubにあるパッケージを直接ダウンロードして簡単に導入することができます。},}GitHubのリポジトリのルートに設定ファイルpackage.jsonが必要プライベートリポジトリからは不可という制約はあるものの、書くだけでダウンロードからインストールまで自動で行ってくれます。指定したフォルダにあるPackageを導入するPCの任意のフォルダにあるPackegeもインストールすることができます。└─ProjectSettingsのようなフォルダの階層の相対位置にあるUnityCommonフォルダのPackageを導入するという意味になります。Windowにも「+」ボタンを押してpackage.jsonを選択すれば同様のことが可能ですが、その場合は絶対パスになってしまい、manifest.jsonをバージョン管理しても他の人が使えなくなってしまうので相対パスに修正するといいと思います。ProjectViewで内容を見る昔はAssetsフォルダ以下のファイルしか閲覧できませんでしたが、Unity2017.2ぐらいからPackageを閲覧できるようになりました。ダウンロードしたPackageはLibrary\PackageCacheフォルダに保存されいるのですが、そのフォルダ構成とファイルが普通のアセットのように見ることができます。Pro)Unity公式のアセットは見るだけで編集できないのですが(むしろ読み取り専用にする方法を知りたい)、実は前述のフォルダを指定したPackageに関しては編集することができます。アセットを作成することもできれば、MaterialなどのInspectorのパラメータを編集することすらできます。このUnityの仕様変更のおかげで自作パッケージの作成が格段に楽になりました。作ってみる実際に新しくなったPackageManagerの仕組みを生かして自作パッケージを作って管理してみたいと思います。パッケージを開発するためのプロジェクトを作成するこれはUnityで新しいプロジェクトを作成してもいいですし、既存のプロジェクトをそのまま使ってもいいでしょう。任意の名前でGitHubでリポジトリを作成してチェックアウトする公開前提のパッケージならGitHubでリポジトリを作って、開発用プロジェクトと同じフォルダにチェックアウトします。非公開なら任意の名前でフォルダを作ったり、プライベートリポジトリにしてしまえばいいでしょう。└─ProjectSettingsパッケージ名をHogePackageとしてフォルダ構成がどのようになっているかを示します。今回は開発用プロジェクトとpackageフォルダを同じ階層に配置しました。2で作成したリポジトリのルートフォルダにpackage.jsonを作成するテキストファイルを作成し、名前をpackage.jsonにします。}}このファイルはリポジトリのルートフォルダに置く必要があります。開発用プロジェクトのmanifest.jsonに相対パスで作ったpackageを登録するチェックアウトしたフォルダを相対パスで指定します。└─ProjectSettingsこのようなフォルダ構成ならPackagesフォルダの2階層上にHogePackageがあるので以下のように指定します。Filesを適切に設定しておくことで、ほかのPackageから参照して使えるようになります。TestでDefinitionを分けるとベストです。Unity.HogePackage.Test.asmdef例えば現在作っているパッケージでは、Editorフォルダ内のスクリプトからRuntimeフォルダ内のスクリプトを使う必要がありますが、Referenceの設定を使ってEditorのDefinitionからRuntimeのDefinitionに対して参照を設定すれば問題ありませんでした。いろいろなパッケージから使う予定の便利なコードを集めたCommonパッケージを用意しているのですが、そのRuntimeのDefinitionを参照に登録すれば、別のパッケージのスクリプトを呼び出すこともできました。開発用プロジェクトからパッケージを編集して開発する相対パスでフォルダを登録しているので、Pakcagesフォルダの中も自由にアセットを追加したり編集できます。ソースコードやアセットの追加も右クリックのメニューにある「Create」から行えますし、Assetsフォルダ以下で作業するのとほとんど変わらずに開発ができるはずです。公開を想定している場合はパッケージ内のアセットを書き換えるような処理を書いたり、ユーザーに編集してもらうような想定のアセットを用意するのはよくありません。本来PackageManagerで管理するパッケージは一般的にバージョン管理対象にしないLibraryフォルダ以下にダウンロードされるので、他の人とチーム開発する場合に変更が反映されないからです。編集してほしいアセットを含めたいのであれば、テンプレートとしてAssetsフォルダにコピーしてもらったり、コピーや生成処理をするようなEditor拡張をしたほうがいいでしょう。Packageに含めないけど動作確認に使いたいアセットは、開発用のUnityプロジェクトのAssetsフォルダに作ればOKです。Assetsフォルダ側のアセットから、Package側のアセットを参照することはできるので困ることはないでしょう。完成したらGitHubにアップロードするHogePackageはリポジトリからチェックアウトしたフォルダなので、そのままコミットしてmasterにマージをするなどすれば公開できます。GitHubならReadmeに導入方法やマニュアルを書いておけば、このリポジトリを知った人がすぐに使うことができるはずです。開発用プロジェクトを残しておけば、バージョンアップや修正も対応しやすいかと思います。使いたい別のProjectのmanifest.jsonにURLを使って登録するPackageを使うだけのひとであればURLでpackageをダウンロードしてもらえばいいので、manifestに1行書いてもらうだけでインストールできます。},}WindowsでSourceTreeを使っている人向けUnityのPackageManagerでGitHubからダウンロードする場合、Gitがコマンドラインから利用できる必要があります。以下の記事を参考にすれば、SourceTreeに入っているGitをコマンドラインで使えるようになります。http://www.it-tech-box.com/2016/05/sourcetree-git-cmd/#まとめ無料公開するPackageならこの手順で簡単に作成して公開できます。同じ相対パスになるようにチーム全員で非公開のリポジトリをチェックアウトしてもらい、manifest.jsonに相対パスでPackageをインストールさせればいいかと思います。ProjectViewでPackagesフォルダが表示されたり、相対パスでPackageをインストールできる前は、PackageManagerに対応するソースコード以外のアセットが含まれるpackageを開発するのは難しいものでした。今回の修正でマテリアルやテクスチャ、プレハブなどのアセットを使うようなパッケージも作りやすくなりました。StoreもPackageManagerで利用できる形で提供されると非常にうれしいですね。最後にこの方法でAudioコンポーネントの録音ライブラリを作ってみました。今回の管理法は結構簡易的なものなので、本気で管理するならもんりぃ先生さんの記事を参考にするといいかもしれません。