Unity 2021におけるパッケージ関連の変更について

# はじめに

Unityにおける「`パッケージ`」とは、さまざまな機能やアセットをまとめたものです。たとえば

* JSON関連の機能を提供する「JSONSerialize」パッケージ
* 2Dマップエディターの機能を提供する「2D Tilemap Editor」パッケージ
* IDEであるRiderとの統合機能を提供する「JetBrains Rider Editor」パッケージ

などがあります。Unityはさまざまな用途に使われおり、コア機能・パッケージが提供する機能も多岐に渡ります。自分のプロジェクトに合わせて、適切なパッケージを選択し導入することが大切です。

そんなパッケージですが、Unity 2021.1で変更がありました。今まで検証済みパッケージだったいくつかのパッケージがコアパッケージに移行されました。また、パッケージの検証状態の名称とその意味・区分が変更されました。

「パッケージの検証状態の名称とその意味・区分の変更」は、今まで「プレビュー（Preview）パッケージ」というパッケージを使っていた人には非常に重要です。この変更を把握しないと、「もともと導入していたプレビュー（Preview）パッケージが見当たらない」というトラブルに見舞われる場合があります。

この投稿は、Unity 2020.3.19f1およびUnity 2021.2.0f1、そして2021年11月の情報を下に執筆しています。変更があったのはUnity 2021.1で、実際の動作検証は最新テックリリース版であるUnity 2021.2で行っていることに注意してください。

# パッケージの種類

Unity 2021.1でのパッケージ関連の変更を説明する前に、まずはパッケージの種類をおさらいしましょう。

パッケージには次のようにいくつかの区分・種類があります。

 * Unityエディターに統合されプロジェクトに応じて有効・無効を設定するビルトインパッケージ
 * Unityエディターにバンドルされているコアパッケージ
 * Unity公式のパッケージ
 * エンドユーザーが作成した再利用可能なコードやアセットをまとめたパッケージ

ビルトインパッケージは次のようなものがあります。

 * JSON関連の機能を提供する「JSONSerialize」パッケージ
 * Tilemap機能を提供する「Tilemap」パッケージ(エディターを含まない)
 * 物理機能を提供する「Physics」パッケージ

Unityエディターにバンドルされているコアパッケージは次のようなものがあります。

 * Sprite Editor機能を提供する「2D Sprite」パッケージ
 * 2DマップのTilemapエディター機能を提供する「2D Tilemap Editor」パッケージ
 * uGUI関連の「Unity UI」パッケージ

Unity公式のパッケージは多くのパッケージがあります。ごく一部を取り上げると次のようなものがあります。

 * Android OSのログライブラリを司る「Android Logcat」パッケージ
 * Burstコンパイラを提供する「Burst」パッケージ
 * モバイルOSのAR機能を提供する「ARCore XR Plugin」パッケージ/「ARKit XR Plugin」パッケージ
 * 新しい入力システムを司る「Input System」パッケージ

ビルトインパッケージ・コアパッケージを除く、Unityが提供するパッケージでは、Unity 2020.3 LTSまで次のような名称がありました。

 * 十分なテストがすんでいて実際のプロジェクトに導入可能な、検証済み（Verified）パッケージ
 * 検証中であり技術調査・技術検証向けな、プレビュー（Preview）パッケージ

Unity 2021.1から「検証済み(Verified）パッケージ」と「プレビュー（Preview）パッケージ」の名称と意味・区分が変更になりました。詳しくは、後述の「パッケージの名称変更」で説明します。

# 検証済みパッケージからコアパッケージへ

次のパッケージは、Unity 2020.3 LTSまでは検証済みパッケージでしたが、Unity 2021.1からコアパッケージになりました。

 * Core RP Library
 * High Definition RP
 * Shader Graph
 * Universal RP
 * Visual Effect Graph

これらのパッケージは、Unity 2020.3 LTSまでは検証済みパッケージでした。そのためパッケージレジストリ（Unity公式のパッケージを保存・配信しているサーバー）からダウンロードされ、特定のディレクトリにキャッシュされ、プロジェクトに導入されました。

ところでUnity 2021.1からこれらのパッケージは、コアパッケージになったことで、Unityエディターの中にパッケージが同梱されるようになりました。たとえばMacでUnity Hubを使っている場合、「"{該当のUnityエディターバージョン}"/Unity/Contents/Resources/PackageManager/BuiltInPackages/」に、コアバッケージが同梱されています。

すでにコアパッケージだった次の3個のパッケージに加え、コアパッケージは計8個になりました。

 * 2D Sprite
 * 2D Tilemap Editor
 * Unity UI

# パッケージの名称変更

Unityに統合されているビルトインパッケージとコアパッケージ以外にも、Unity公式のパッケージがあります。
Unity 2020.3 LTSからUnity 2021.1へのアップデートにおいて、それらの名称・意味・区分が変わりました。

## Unity 2020.3 LTSまでの名称

まずはUnity 2020.3 LTSまでの名称と意味を確認します。

Unity 2020.3 LTSまではUnityに統合されているビルトインパッケージとコアパッケージ以外に、

* 「検証済みパッケージ（Verified Package）」
* 「プレビューパッケージ（Preview Package）」

というパッケージがありました。

「検証済み（Verified）」および「プレビュー（Preview）」は、実プロジェクトで利用可能かどうかの検証状態を表しています。「検証済み（Verified）パッケージ」は十分なテストがすんでいて実際のプロジェクトに導入可能なパッケージです。「プレビュー（Preview）パッケージ」は検証中であり技術調査・技術検証向けのパッケージです。

プレビュー（Preview）パッケージは、今後大きな仕様変更が入ったり、サポートが終わる可能性もあるパッケージです。また、実験的なパッケージも含んでいました。

執筆時点(2021年11月30日時点)、Unity 2020.3 LTSにおいて、検証済み（Verified）パッケージは多数あります。一部の例として次のようなものがあります。

 * Android Logcat
 * Burst
 * Input System

執筆時点(2021年11月30日時点)、Unity 2020.3 LTSにおいて、いくつかのプレビュー（Preview）パッケージが存在します。例としては次のものがあります。

 * 2D IK
 * 2D Tilemap Extras
 * UI Builder

「検証済み（Verified）」と「プレビュー（Preview）」という、検証状態を示す名称は、一見すると良さそうです。ところが「プレビュー（Preview）」パッケージは、次の2つの状態の判別がつかないという問題がありました。

 * 「近いうちに検証済み（Verified）パッケージになる予定で、そのうち実際のプロジェクトで使えるようになるパッケージ」
 * 「あくまで実験的な機能としての提供で、いつまで経っても検証済み（Verified）パッケージとならない可能性もあるパッケージ」

利用側としては、「プレビュー（Preview）」状態のパッケージに対してどれくらい力をいれて試してよいか分からず、使いにくかったのです。

## Unity 2021.1からの名称

「プレビュー（Preview）」という状態の分かり難さを解消するために、Unity 2021.1から「検証済み（Verified）」と「プレビュー（Preview）」という名称をやめ、新しいパッケージの名称と意味・区分を導入しました。それにより、パッケージ利用側がサポートされているパッケージの状態を明確に区別できるようになりました。

Unity 2021.1より、パッケージの検証状態は、次の名称・意味・区分になりました。（Unityに統合されているビルトインパッケージとコアパッケージを除く）

 * リリース済み（Released）
 * プレリリース（Pre-release）
 * 実験的（Experimental）
 * リリース候補（Release Candidates）
 * 非推奨（Deprecated）

それぞれの内容を紹介します。

### リリース済み （Released）

「リリース済み（Released）」な状態は、Unity 2020.3 LTSまでの「検証済み（Verified）」に相当します。

リリース済み（Released）パッケージは、実際のプロジェクトにも、安心して導入できます。プロジェクトへの導入では、パッケージマネージャーウィンドウにおいて、何もせずとも導入候補パッケージとして出てきます。リリース済み（Released）パッケージの一覧は、公式ドキュメント「[Released packages](https://docs.unity3d.com/2021.1/Documentation/Manual/pack-safe.html)」から確認できます。

### プレリリース（Pre-release）

「プレリリース（Pre-release）」な状態は、その年のUnity LTSリリースまでに安定した状態になり、リリース済み（Released）パッケージになることが期待されているパッケージです。

プレリリース（Pre-release）パッケージは、公式にサポートされていて、ロードマップの一部となっています。また、検証途中でもあるためパッケージへのフィードバックが求められている状態でもあります。プレリリース（Pre-release）パッケージの一覧は、公式ドキュメント「[Pre-release packagess](https://docs.unity3d.com/2021.1/Documentation/Manual/pack-preview.html)」から確認できます。

プレリリース（Pre-release）パッケージは、デフォルト設定では、パッケージマネージャーウィンドウの導入候補に出てきません。次の画像のように、「Enable Pre-release Packages」にチェックを入れることで、導入候補に出てきます。

![スクリーンショット 2021-11-30 23.50.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4125/21fee6dd-93db-9527-aa23-73618f7fd127.png)


### 実験的（Experimental）

「実験的（Experimental）」な状態は、あくまで実験的なパッケージの状態、手探り的なパッケージの状態です。

実験的（Experimental）パッケージは、最終的にリリースされずに、「非推奨(Deprecated）」となる可能性があることに注意してください。また、製品として十分にテストされておらず、ロードマップに含まれているわけではありません。誤って実験的（Experimental）パッケージを実プロジェクトへ導入することを防ぐため、Unityエディターのパッケージマネージャーウィンドウの導入候補の一覧で、実験的（Experimental）パッケージは表示されないようになっています。実験的（Experimental）パッケージの導入方法は、それぞれのパッケージのフォーラムなどを参照してください。

Unity 2020.3LTSにおいて、プレビュー（Preview）パッケージとして公開されていたパッケージは、原則すべて実験的（Experimental）パッケージになりました。ただし「2D Tilemap Extras」のように、プレビュー(Unity 2020.3 LTS)からリリース済み(Unity 2021.1)状態に移行し、プレビュー（Preview）な状態を脱したパッケージもあることに注意してください。

実験的（Experimental）パッケージの情報が欲しい場合は、ベータ版の各種情報チャンネル、そして「[フォーラム](https://forum.unity.com)」で情報を探してください。繰り返しになりますが、実験的（Experimental）パッケージは将来的にサポートが終了し、非推奨（Deprecated）となる可能性があることに十分に注意してください。

プレリリース（Pre-release）から実験的（Experimental）になったパッケージのいくつかは、公式ドキュメント「[Adding a registry package by name](https://docs.unity3d.com/ja/2021.1/Manual/upm-ui-quick.html)」に記載されている方法で、Unity 2021.2でも導入できることを確認しました。ここでは実験的（Experimental）パッケージの「UI Builder」を例として、導入方法を紹介します。（執筆時点・2021年11月30日時点の情報）

まず確認をします。次の画像は、Unity 2020.3 LTSにおいて、「Enable Peview Packages」にチェックを入れた状態のパッケージマネージャーウィンドウです。Unity 2020.3 LTSでは、「UI Builder」が導入候補に出ていることに注目してください。

![スクリーンショット 2021-11-30 23.44.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4125/eeadb7a6-fe04-654b-180b-5e66db56cd6d.png)

次の画像は、Unity 2021.2 において、「Enable Pre-release Packages」にチェックを入れた状態のパッケージマネージャーウィンドウです。Unity 2021.2 では、「UI Builder」が導入候補として存在しないことに注目してください。これは実験的（Experimental）パッケージが、Unityエディターのパッケージマネージャーウィンドウの導入候補の一覧に表示されなくなったためです。

![スクリーンショット 2021-11-30 23.36.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4125/be98ef8b-953d-52e2-77cc-3b59ffa59338.png)

次にUnity 2021.2 において、UI Builderを導入する方法を示します。パッケージマネージャーウィンドウの左上の+ボタンを押下し、ドロップダウンから「Add Package by Name」を選択すると、次の画像のようにポップアップが出てきます。そこで上部に「com.unity.ui.builder」と入力し、右下のAddボタンを押下するとプロジェクトにUI Builderが導入できます。「com.unity.ui.builder」は、UI Builderのnameです。Unity 2020.3 LTSのドキュメントに記載されています。

![スクリーンショット 2021-11-30 23.38.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4125/fb55a34f-825c-8833-0db8-7fff090e1af7.png)

UI Builderが導入できると、次のようにプロジェクトに導入されているパッケージ一覧に表示されます。

![スクリーンショット 2021-11-30 23.44.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4125/1e0aad60-5b3b-51fd-dddf-bbb53d1186e0.png)

すべての「プレリリース（Pre-release）から実験的（Experimental）になったパッケージ」がこの方法で導入できるわけではないことに注意してください。

### それ以外の状態

ここまで次のパッケージの状態を説明しました。

 * リリース済み（Released）
 * プレリリース（Pre-release）
 * 実験的（Experimental）

この3つの状態に加え、次の2つの状態があります。

 * リリース候補(Release Candidates）
 * 非推奨（Deprecated）

「リリース候補（Release Candidates）」な状態は、プレリリース（Pre-release）パッケージが、リリース済み(Released）になる準備ができた場合に遷移する状態です。
この状態になると、リリース済み(Released）パッケージ一覧に表示されます。ただし表示は「Released」ではなくて「Release Candidate」や「RC」という表示がされます。

非推奨（Deprecated）は、サポートが終わった状態です。「実験的（Experimental）」パッケージが、リリースされずにこの状態となる可能性があることに注意してください。

# まとめ

Unity 2021.1では、Unityパッケージ関連で変更がありました。

今まで検証済みパッケージだったいくつかのパッケージがコアパッケージに移行されました。「このパッケージは無くなったのかな」と思ったら、コアパッケージに移行した場合もあるので、注意してください。

また「パッケージの検証状態の名称とその内容」が変更されました。プレビュー（Preview）という、どう扱っていいか分かりずらい状態が、プレリリース（Pre-release）と実験的（Experimental）という区別しやすい状態に別れました。

Unity 2020.3 LTSでプレビュー（Preview）だったパッケージは、Unity 2021.1で実験的（Experimental）パッケージになったものもあります。実験的（Experimental）パッケージは、Unityエディターのパッケージマネージャーウィンドウの導入候補には出てきません。「あるプレビュー（Preview）だったパッケージは、Unity 2020.3 LTSでは、パッケージマネージャーウィンドウの導入候補に出てきた。しかしUnity 2021.1から実験的（Experimental）になったので、パッケージマネージャーウィンドウに出てこなくなった」という場合に注意してください。

Unityを用いた開発において、パッケージは必要不可欠です。今回の変更、そしてこの投稿の内容が、みなさんの開発の助けとなることを祈っております。

# リンク集

次のドキュメントは、Unityにおけるパッケージマネジャーのコンセプトや用語解説があります。


 * [Unity's Package Manager Concepts(Unity 2021.1)](https://docs.unity3d.com/2021.1/Documentation/Manual/upm-concepts.html)
 * [Unity's Package Manager Concepts(Unity 2020.3)](https://docs.unity3d.com/2020.3/Documentation/Manual/upm-concepts.html)
 
次の公式ブログは、Unity 2021.1から変更になったパッケージの名称・意味を解説しています。Q&Aが特に必見です。

 * [Unity 2021.1 の新しいパッケージマネージャー体験](https://blog.unity.com/ja/technology/a-new-package-manager-experience-in-unity-20211)

筆者がこの投稿の内容の一部を発表したセッション動画：「[Unity 2021.1でのUnityパッケージの名称変更について](https://learning.unity3d.jp/7648/)」

# 補足

この投稿は、筆者が寄稿した「[UniBook 13](http://www.unity-bu.com/2021/07/unibook13-info.html)」の「Unity 2021.1におけるパッケージ関連の変更について」を、再編集したものです。

Unity 2021.2で動作確認し、また最新情報に合わせて内容を更新し、編集したものです。