今回は自作Package を Unity Package Manager (upm) に対応させる方法をまとめました。
Packageを作成
まずはPackageフォルダを作成します。今回はPackage名を「test-upm」とします。
Packageフォルダ直下に package.json を作成します。
必須項目は name, version のみです。他項目の詳細はこちら
{ "name": "jp.goisagi.test-upm", "displayName": "test-upm", "version": "0.0.1", "unity": "2019.3", "description": "Description for this package." }
次に検証用Unityプロジェクトを作ります。
今回は名前を「test-proj」として、Packageと同じ階層に配置します。
test-proj > Packages > manifest.json に自作PackageのPackage名とパスを追加します。
パスは Packagesフォルダからの相対パスになります。
"dependencies": { "jp.goisagi.test-upm": "file:../../test-upm" }
検証用Unityプロジェクトを起動すると自作Packageの読込が行われます。
以下のようにPackageが追加されていればOKです。
次にスクリプト配置用のフォルダを作成します。フォルダ構成はUnity標準のPackageに合わせて Scripts > Runtime で作成します。
Assembly Definition File を追加します。ProjectビューからRuntimeフォルダを右クリック > Create > Assembly Definition で asmfファイルを作成します。
次にPackage用のcsファイルを作成します。
最後にcsファイルをInspectorビューから確認して Assembly Information に先程のasmfファイルが設定されてるのを確認します。
Package作成の大まかな流れは以上となります。他のUnityプロジェクトにインポートしたい場合は同様に対象UnityプロジェクトのPackages/manifest.json に自作Packageのパスを設定するだけです。
GitHub連携
自作PackageをGitHubと連携する方法です。
GitHubに登録
これは対象Package を任意のリポジトリにpushするだけです。今回の場合は「test-upm」以下が対象となります。
また、バージョンに応じてインポートをしたい場合は以下のようにタグを追加しておきます。
git tag 1.0.3 git push --tags
GitHubからインポート
インポートは対象Unityプロジェクトの Packages/manifest.json にGitHubのURLを記述するだけです。
"dependencies": { "jp.goisagi.test-upm": "https://github.com/aki517/test-upm.git" }
バージョンを指定する場合は以下になります。
"dependencies": { "jp.goisagi.test-upm": "https://github.com/aki517/test-upm.git#0.0.1" }
サンプルの追加
Unity2019.1以降からサンプルの追加が可能になりました。
サンプルを配置するルートフォルダを作成します。
必ず末尾に「~」を付けてください。次に各サンプルのフォルダを作成して、サンプル用のスクリプト、シーンを置きます。
package.json に以下のようにサンプル設定を追加します。(サンプルは複数設定可能です)
{ "samples": [ { "displayName": "Sample1", "description": "Description for sample 1", "path": "Samples~/Sample1" }, { "displayName": "Sample2", "description": "Description for sample 2", "path": "Samples~/Sample2" } ] }
Package Manager に「Import into Project」ボタンが追加されていればOKです。
サンプルをインポートすると Assets 以下に配置されます。バージョン分けしてくれるのは便利ですね ^_^
依存関係について
自作Packageをインポート時に依存するPackageも一緒にインポートすることできます。
設定は package.json に dependencies を追加して、関係するPackageとバージョンを記述します。
{ "name": "jp.goisagi.test-upm", "displayName": "test-upm", "version": "0.0.1", "unity": "2019.3", "description": "Description for this package." "dependencies": { "com.unity.textmeshpro": "2.0.0" } }
ただし、こちらはUnity標準で公開されているPackageのみです。現時点では自作Packageを依存関係に設定できないようです。。フォーラムにも上がってます。
一般的な解決策は自前のUnity Package Serverを立て、自作Packageを追加・公開になります。
medium.com
もしくはこちらのPackageをインストールすれば自作Packageの依存関係をある程度は解決できますが、依存関係を解決するアルゴリズムがUnity標準の機能とは異なるため目的のPackageがインストールされない場合があるのと、都度このPackageをUnityプロジェクトにインポートする必要があります ^_^;
github.com
おまけ
ローカルの自作Packageを組込み先の Visual Studio プロジェクトで編集したい場合、 Unity > Preferences > External Tools にある Local packages にチェックを入れます。
参考
Unity - Manual: Creating custom packages
UPM: How to make a custom package · GitHub
Samples in Packages - Manual Setup - Unity Forum