えんじにあ雑記!

開発していて学んだことをまとめていきます!

自作Packageを作成、UPMで管理してみた

f:id:flat-M_M:20210102182200p:plain

開発を高速化させるためにも、汎用的に使える機能やUI基盤などは使いまわせるようにしたいですよね。

今回はUnity Package Managerを使って自作のパッケージを作成、配布する方法までを紹介します。

はじめに

新年あけましておめでとうございます!!

2020年はチームで開発したものが4つ、個人で開発したものが1つ、内定先のアルバイトで参加させてもらったものが2つの合計7つと、たくさんのゲーム開発に携わらせて頂きました!!

いろいろなゲームの開発を通して、汎用的に使える基盤機能の管理の重要性に気付きました。

企業レベルになるとそれらは社内ライブラリとしてプロジェクトとは別に管理されているところも多いと思います。

個人開発の方に聞いてみたら「プロジェクトから切り分けて管理している」とおっしゃっていたこともあり、自分もそういう自作Packageを管理したいと思いました。

そこで今回は、自作Packageを作成し、Unity Package Managerで管理できるようにしたという記事になります。

Unity Package Managerとは

Unity Package Managerとは何かに関する詳細な説明を見たい場合は、下記に掲載している公式ドキュメントをご覧ください。

ここでは簡潔に説明することにとどめますが、UnityにおけるPackage(様々なアセットを格納したもの)をマニフェストファイルの設定に合わせて、適時インストール、バージョンの切り替えなどが行えるPackage管理ツールです。

docs.unity3d.com

自作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 オブジェクト パッケージの作者に関する情報

この辺りの詳細な説明は下記のリンク先から公式ドキュメントを参照してください。

docs.unity3d.com

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

qiita.com

githubにpush

ここまで準備できれば最低限自作パッケージをUnity Package Managerで管理する準備が完了しました。

あとは、Package/<自作パッケージ名>直下をgit管理してgithubにpushします。

自作PackageをUPM経由で管理

UPMの管理に登録

まず、githubリポジトリURLを取得します。

おそらく

https://github.com<ユーザ名>/<自作パッケージ名>.git

的なURLになると思うので、それをUnityEditor上からPackage Manager経由で設定します。

まず、WindowメニューからUnity Package Managerを開きます。

f:id:flat-M_M:20210102173655p:plain

次に、+ボタンを押して自作PackageのリポジトリURLを追加します。

f:id:flat-M_M:20210102173728p:plain

これでUnityEditorに戻ったときに自動で自作Packageのインポートが走ると思います!