開発を高速化させるためにも、汎用的に使える機能やUI基盤などは使いまわせるようにしたいですよね。
今回はUnity Package Managerを使って自作のパッケージを作成、配布する方法までを紹介します。
はじめに
新年あけましておめでとうございます!!
2020年はチームで開発したものが4つ、個人で開発したものが1つ、内定先のアルバイトで参加させてもらったものが2つの合計7つと、たくさんのゲーム開発に携わらせて頂きました!!
いろいろなゲームの開発を通して、汎用的に使える基盤機能の管理の重要性に気付きました。
企業レベルになるとそれらは社内ライブラリとしてプロジェクトとは別に管理されているところも多いと思います。
個人開発の方に聞いてみたら「プロジェクトから切り分けて管理している」とおっしゃっていたこともあり、自分もそういう自作Packageを管理したいと思いました。
そこで今回は、自作Packageを作成し、Unity Package Managerで管理できるようにしたという記事になります。
Unity Package Managerとは
Unity Package Managerとは何かに関する詳細な説明を見たい場合は、下記に掲載している公式ドキュメントをご覧ください。
ここでは簡潔に説明することにとどめますが、UnityにおけるPackage(様々なアセットを格納したもの)をマニフェストファイルの設定に合わせて、適時インストール、バージョンの切り替えなどが行えるPackage管理ツールです。
自作Packageの作成
プロジェクトの作成
まずは、新規Unityプロジェクトを作成します。この際のプロジェクト名はPackage名とは関わらないので自由につけて問題ありません。
新規プロジェクト作成時点でのディレクトリ構成は下記のようになると思います。
. ├── Assets ├── Library ├── Logs ├── Packages └── ProjectSettings
このPackagesディレクトリ下に自作Package用のディレクトリを作成していきます。
自作Package用のディレクトリは必ずしもPackagesディレクトリ下に作成しないといけないわけではないのですが、公式ドキュメントがそこに作成することを想定しているのと、Packages下に作成するとEditor上で見ることもできるので便利かと思います。
ですので、ここではPackages直下に自作Package名でディレクトリを作成します。
自作Package用のフォルダ構成
Packageディレクトリ下に作成した自作Package用ディレクトリの中に、Unity公式パッケージが従うパッケージレイアウト規則に従ってディレクトリや必要なファイルを作成します。
これも必ずしもこうでないといけないというわけではありませんが、公式ドキュメントに準拠しない理由が特にないことと、構成上も見易いと感じたので従っていきます。
<root> ├── package.json ├── README.md ├── CHANGELOG.md ├── LICENSE.md ├── Editor │ ├── Unity.[YourPackageName].Editor.asmdef │ └── EditorExample.cs ├── Runtime │ ├── Unity.[YourPackageName].asmdef │ └── RuntimeExample.cs ├── Tests │ ├── Editor │ │ ├── Unity.[YourPackageName].Editor.Tests.asmdef │ │ └── EditorExampleTest.cs │ └── Runtime │ ├── Unity.[YourPackageName].Tests.asmdef │ └── RuntimeExampleTest.cs └── Documentation~ └── [YourPackageName].md
package.jsonに情報を記述する
次に、作成したpackage.jsonに自作Packageに関する情報を記述していきます。
package.jsonはパッケージマニフェストファイルと呼ばれ、特定のパッケージの特定のバージョンに関する情報を管理するものになります。
記述できる属性は下記のものがありますが、上2つのname, versionは必須の属性となっています。
属性 | JSON型 | 説明 |
---|---|---|
name | 文字列 | 正式に登録されたパッケージ名。Package Managerウィンドウに表示される表示名とは異なる。 |
version | 文字列 | MAJOR.MINOR.PATCHで指定されるバージョン番号 |
displayName | 文字列 | UnityEditorに表示されるユーザにわかりやすい名前のこと |
description | 文字列 | パッケージの簡単な説明 |
unity | 文字列 | パッケージが互換性を持つ最低のUnityバージョンでMAJOR.MINORで表記する |
unityRelease | 文字列 | パッケージに互換性のある特定のUnityのリリースを示すバージョンの一部 |
dependencies | オブジェクト | パッケージの依存関係のマップ。\<パッケージ名>\<特定のバージョン>で表記する |
keywords | 文字列の配列 | Package Managerの検索APIによって使用されるキーワードの配列 |
type | 文字列 | Package Manager に追加情報を与える定数 |
author | オブジェクト | パッケージの作者に関する情報 |
この辺りの詳細な説明は下記のリンク先から公式ドキュメントを参照してください。
Assembly Definitionsの配置
各ディレクトリにAssembly Definitionsを配置します。Assembly Definitionsを自作パッケージに設置する理由は下記のリンク先で説明されていますのでここでの解説は省きます。
ここでも各Assembly Definitionsの命名規則が公式ドキュメントに記載されていたため、紹介しておきます。
- Editor固有のコード: MyCompany.MyFeature.Editor.asmdef
- Runtime固有のコード: MyCompany.MyFeature.Runtime.asmdef
- Editorのテストコード: MyCompnay.MyFeature.Editor.Tests.asmdef
- Runtimeのテストコード: MyCompany.MyFeature.Runtime.Tests.asmdef
githubにpush
ここまで準備できれば最低限自作パッケージをUnity Package Managerで管理する準備が完了しました。
あとは、Package/<自作パッケージ名>直下をgit管理してgithubにpushします。
自作PackageをUPM経由で管理
UPMの管理に登録
おそらく
https://github.com<ユーザ名>/<自作パッケージ名>.git
的なURLになると思うので、それをUnityEditor上からPackage Manager経由で設定します。
まず、WindowメニューからUnity Package Managerを開きます。
次に、+ボタンを押して自作PackageのリポジトリURLを追加します。
これでUnityEditorに戻ったときに自動で自作Packageのインポートが走ると思います!